2016-02-26 4 views
0

Я пытаюсь настроить устройство для проверки регистрации пользователя, проверяя, существует ли код, вводимый пользователем при регистрации, в таблице. Чтобы проверить это, я сейчас просто тестирую ввод со статической строки. Любые мысли о том, как это сделать? Проблема заключается в том, что строка не передается из поля: ticket_id в функцию: invite_code_valid в классе пользователя по какой-либо причине. Когда я проверяю, что находится в переменной, он просто пуст, и при использовании строки «привет» при регистрации указывается указанное сообщение об ошибке.Добавление пользовательской проверки поля в ROR Devise

код в героя мерзавца, так что я не могу ссылаться на него, но я сделал это:

миграции:

class AddUserTicketIdField < ActiveRecord::Migration 
    def change 
    change_table :users do |t| 
     t.text :ticket_id 
    end 
    end 
end 

В моделях/user.rb:

validate: invite_code_valid,: on =>: создать

def invite_code_valid 
    unless self.ticket_id == "hello" 
     self.errors.add(:ticket_id, "membership code is not one we recognize, check again?") 
    end 
    end 

В DEViSE/регистрации/new.html.erb:

<div class="field"> 
    <%= f.label :Membership_code %><br /> 
    <%= f.text_field :ticket_id, autocomplete: "off" %> 
</div> 

Чтобы увидеть, если код работает на все, что я попытался проверки определенной электронной почты, как это:

def invite_code_valid 
    unless self.email == "[email protected]" 
     self.errors.add(:ticket_id, "membership code is not one we recognize, check again?") 
    end 
    end 

Это работает. При регистрации по электронной почте [email protected] регистрация идет, но не иначе.

Что происходит, я пропустил что-то о том, как работает Devise?

------------ ------------ решаемые

Джош Deedens ответ ниже ударил пятно. БЛАГОДАРЯ! Для справок в будущем это то, что я сделал.

class ApplicationController < ActionController::Base 

    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up)  << :ticket_id 
    end 
end 

ответ

2

Моя ставка на вас кто-то укусил strong_parameters:

Из README DEViSE: https://github.com/plataformatec/devise#strong-parameters:

При настройке свои собственные взгляды, в конечном итоге можно добавлять новые атрибуты к формам. Rails 4 переместил параметрическую дезинфекцию от модели к контроллеру, заставив Devise обрабатывать эту проблему и на контроллере.

Документов идти, чтобы дать этому примеру

class ApplicationController < ActionController::Base 
    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) 
    end 
end 

Так попробуйте добавить метод configure_permitted_parameters к вашему ApplicationController, наряду с соответствующим фильтром. И замените ключ :username на :ticket_id и посмотрите, не устраняет ли проблема ваш билет_ид, ноль.

Удачи вам!

+0

Спасибо МНОГО! Это в значительной степени исправило это! С помощью вышеприведенного кода летучей мыши по какой-то причине давал ошибку метода, но я немного искал язык и менял его. Решение в оригинальном вопросе! Бесконечно благодарен! – aerugo

+0

Добро пожаловать. Рад, что это помогло! –

Смежные вопросы