在模型对话框栏中添加form_for

时间:2015-06-15 16:26:30

标签: ruby-on-rails ruby-on-rails-4 form-for

我有家庭控制器和电子邮件控制器。在家庭控制器中,我有一个模型对话框来更新电子邮件表格中的字段。

所以我在家庭控制器中创建了一个方法来创建像这样的新电子邮件领域

  def esave
  @email = Email.new(user_params)
  if !user_params.nil?
    if @email.save_with_captcha
      flash[:notice] = "Thank you for registering you email address"
      redirect_to :action => 'new'
    else
      render 'new'
    end
  end

def user_params
  params.require(:email).permit(:email, :captcha, :captcha_key) if params[:email]
end

现在我想在家庭控制器视图中访问此方法。我试图用这个

这样做
  <%= form_for(@email, url: home_esave_path, :html => {class:"form-signin"}) do |f| %>
< % end % >

但是它正在抛出错误

ActionView::Template::Error (First argument in form cannot contain nil or be empty):
App 31348 stderr:     100:  </div>
App 31348 stderr:     101: 
App 31348 stderr:     102:  <!-- Modal -->
App 31348 stderr:     103:  <%= form_for(@email, url: home_esave_path,    :html => {class:"form-signin"}) do |f| %>
App 31348 stderr:     104:  <% if @email.errors.any? %>
App 31348 stderr:     105:  <div id="error_explanation">
App 31348 stderr:     106:    <h2>
App 31348 stderr:   app/views/home/index.html.erb:103:in ` _app_views_home_index_html_erb__972726411912165480_69960653266320'

我没有添加模型对话框代码,因为它是纯HTML。所以关于如何在家庭控制器视图中使用电子邮件控制器对象的任何建议。

1 个答案:

答案 0 :(得分:0)

改变这个:

<%= form_for(@email, url: home_esave_path, :html => {class:"form-signin"}) do |f| %>

用这个:

<%= form_for(@email||Email.new, url: home_esave_path, :html => {class:"form-signin"}) do |f| %>