FormTagHelper NoMethodError

时间:2013-10-09 04:37:41

标签: ruby-on-rails form-helpers

我正在努力用我的FormTagHelper修复这个问题,我试图通过的参数被解释为方法 - 因此没有方法错误。

以下是观点:

<%= 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

当我在开发中加载页面时,这是no方法错误:

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

这让我感到困惑,因为我在应用程序中使用了其他几个FormTagHelpers,语法几乎相同,而且它们运行正常。

会喜欢这个额外的眼睛。我提前非常感谢n00b !!

1 个答案:

答案 0 :(得分: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 %>

希望它会有所帮助。谢谢