提交包含多个模型的表单

时间:2015-08-25 16:46:33

标签: ruby-on-rails sqlite

我需要一种方法来在一个表单中保存2个或更多模型。 Mymodel有两个输入(s_url和i_url)。这是我设置的测试表单。

<%= form_for :mymodel, :url => mymodels_path do |f| %>
    <p>
      <%= f.text_field :s_url %><br />
      <%= f.text_field :i_url %>
    </p>

    <p>
      <%= f.text_field :s_url %><br />
      <%= f.text_field :i_url %>
    </p>
    <p><%= f.submit "Submit" %></p>
<% end %>

这是控制器:

def new
    @mymodel = Mymodel.new
end

 def create
    @mymodel = Mymodel.new(s_url: params[:s_url], i_url: params[:i_url])
    if @mymodel.save
      redirect_to some_index_path(@some_index, :anchor => params[:s_url])
    end
  end

当我保存时,它只提交其中一个模型而不是两者。此外,我不知道用户将保存多少型号。我只是将2硬编码到表单中以测试它们是否都会发送。但最终,形式将是动态的。

1 个答案:

答案 0 :(得分:0)

def new
    @mymodel = Mymodel.new
end

 def create
    @mymodel = Mymodel.new(s_url: params[:s_url], i_url: params[:i_url])
    if @mymodel.save
      redirect_to some_index_path(@some_index, :anchor => params[:s_url])
    end
  end

在您的控制器代码的两个操作中,我看到您只有模型(Mymodel)并且您正在创建该模型的实例并保存它(@mymodel.save)。那么,你怎么能期望它提交给两个模型呢?

如果你真的想在同一个动作中创建和保存两个模型,那么你会做这样的事情(取决于你的模型的样子):

def create
  # creating two models
  @mymodel_1 = Mymodel1.new(s_url: params[:s_url])
  @mymodel_2 = Mymodel2.new(i_url: params[:i_url])

  # saving two models
  if @mymodel_1.save && @mymodel_2.save
    redirect_to some_index_path(@some_index, :anchor => params[:s_url])
  end
end

但是,您不能一次重定向到多个模型实例。你必须重定向到其他地方。