Условное значение только для метода создания ActiveRecord - PullRequest
1 голос
/ 28 декабря 2010

У меня есть форма, где у меня есть администратор, создающий новых пользователей. Форма использует модель пользователя, которую я создал (логин, пароль, имя и т. Д.). Для последнего поля формы я хочу иметь флажок, который не нужно хранить как часть пользовательской записи, но он необходим для контроллера. Это будет контролировать, будет ли вновь созданный пользователь получать приветственное письмо или нет. Это в Rails 3.0.3.

def create
  @user = User.new(params[:user])

  if @user.save
    if @user.send_welcome_email
      UserMailer.welcome_email(@user).deliver
    end
    redirect_to(admin_users_url, :notice => "User #{@user.name} was successfully created.")
  else
    render :action => "new"
  end
end

На мой взгляд (хамл) я пытаюсь получить к нему следующий доступ:

  %p
    Send Welcome Email?
    = f.check_box :send_welcome_email

Я пытался сделать это attr_accessible: :send_welcome_email, но контроллер не распознает его. Я получаю

undefined method 'send_welcome_email' for #<User:0x00000100d080a8>;

Я бы хотел, чтобы это выглядело так: image

Каков наилучший способ заставить это работать?

Ответы [ 3 ]

2 голосов
/ 28 декабря 2010

То, что вы хотите, это не attr_accessible, а attr_accessor. Вот и все.

Однако ваш код будет выглядеть лучше, если вы переместите код отправки электронного письма наблюдателю.

0 голосов
/ 28 декабря 2010

В качестве альтернативы attr_accessor вы всегда можете сначала удалить его из параметров:

def create
  send_welcome_email = params[:user].delete(:send_welcome_email)
  @user = User.new(params[:user])

  if @user.save
    UserMailer.welcome_email(@user).deliver if send_welcome_email
    redirect_to(admin_users_url, :notice => "User #{@user.name} was successfully created.")
  else
    render :action => "new"
  end
end

Возможно, вам придется убедиться, что параметр успешно преобразован в логическое значение; в противном случае условие всегда будет истинным (0 равно true в Ruby).

0 голосов
/ 28 декабря 2010

Поскольку вы не сохраняете его для пользователя, вы можете использовать check_box_tag вместо f.check_box и получить к нему доступ с помощью параметров [: send_welcome_email].Хотя даже так, как у вас, я думаю, вы можете получить к нему доступ как params [: user] [: send_welcome_email].

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