2013-10-09 2 views
0

Я пытаюсь исправить эту проблему с помощью своего FormTagHelper, где параметры, которые я пытаюсь передать, интерпретируются как методы - следовательно, ошибка метода.FormTagHelper NoMethodError

Вот вид:

<%= form_tag update_user_email_admin_user_path do %> 
<%= text_field :user, :email, placeholder: 'E-mail or user id' %> 
<%= text_field :user, :new_email, placeholder: 'New e-mail' %> 
<%= submit_tag "Update email", class: 'btn-1 btn-round btn-size-2' %> 
<% end %> 

А вот действие контроллера (для справки):

def update_user_email 
    user_check = User.find_by_email(params[:user][:new_email].downcase.strip) 

    if user_check.blank? 
    @user.email = params[:user][:new_email].downcase.strip 
    @user.save 
    flash[:notice] = "Email updated" 
    else 
    flash[:alert] = "This email is already being used by someone else!" 
    end 
end 

И когда я загрузить страницу в развитии, это ошибка нет методы:

NoMethodError at /admin/users/195455 undefined method 'new_email' for #<User:0x007f9198c3f560>

Это меня смущает, потому что я использовал несколько других FormTagHelpers в приложении, с почти идентичным синтаксисом, и они работают нормально.

Хотел бы получить дополнительный набор глаз на этом. Я очень благодарен n00b!

ответ

1

Потому что, предполагая, что вы пытаетесь сохранить значение User в поле new_email, этого не существует в вашей таблице users. Для этой формы используйте text_field_tag. вы можете найти docs здесь:

<%= form_tag update_user_email_admin_user_path do %> 
<%= text_field_tag 'email', nil , placeholder: 'E-mail or user id' %> 
<%= text_field_tag 'new_email', nil , placeholder: 'New e-mail' %> 
<%= submit_tag "Update email", class: 'btn-1 btn-round btn-size-2' %> 
<% end %> 

Надеется, что это будет help.Thanks