Почему эта переменная в этом блоке для этого кода проверки пуста? - PullRequest
0 голосов
/ 11 июня 2011

Я использую Devise и пытаюсь настроить код приглашения, который пользователь должен ввести, чтобы зарегистрироваться. У меня есть этот код в моей модели пользователя:

attr_accessor :invite_code

validates_each :invite_code, :on => :create do |record, attr, value|
    record.errors.add attr, "is wrong" unless value == "12345"
end

и это текстовое поле:

<%= f.text_field :invite_code %>

Проблема в том, что value всегда пуст, поэтому проверка всегда завершается неудачей, даже если код приглашения - "12345".

Полагаю, это может быть связано с тем, что файл, содержащий текстовое поле, не находится в каталоге пользователя, а находится в отдельном каталоге регистраций (я сделал это из следующего этого railscast при настройке omniauth). Я действительно не уверен, хотя. Как мне это исправить?

Вот дополнительная информация:

Это в моих маршрутах.rb:

devise_for :users, :controllers => { :registrations => 'registrations'}

это в моем контроллере пользователя:

def new
  @user = User.new
end

def create
  @user = User.new(params[:user])
  if @user.save!
    redirect_to videos_path
  else
    render :action => 'new'
  end
end

Это в моем контроллере регистрации:

def create  
  super  
  session[:omniauth] = nil unless @user.new_record?
end

Ответы [ 2 ]

0 голосов
/ 11 июня 2011

Так что проблема заключалась в том, что в дополнение к attr_accessor :invite_code мне также требовалось attr_accessible :invite_code

0 голосов
/ 11 июня 2011

Я считаю, что value передается как массив.Итак ..

record.errors.add attr, "is wrong" unless value[0] == "12345"

должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...