多模型嵌套选择类型下拉表单提交

时间:2014-12-17 13:59:58

标签: ruby-on-rails ruby-on-rails-4 nested-forms

我之前在这里问过这个问题:Submit additional forms to another model with native model from the controller

并得到了一些答案,在此帮助下,我提出了一些解决方案和一些问题。 这是问题所在:

我有2个型号, 我提交表格的模型A属于另一个模型B. 现在模型B显示为选择下拉标记。

我希望此表单提交提交并关联模型A中的每个新条目  并自动参考Model B的id。这是简短版本。 以下是故事的展开方式:

模型A是RetailerPage

class RetailerPage < ActiveRecord::Base
    ..some code..
    belongs_to :retailer_name
    accepts_nested_attributes_for :retailer_name
end

模型B是RetailerName

class RetailerName < ActiveRecord::Base
    has_many :retailer_pages
    validates_presence_of :name
end

retailer_pages_controller我想提交的地方是:

class RetailerPagesController < ApplicationController
  before_action :set_retailer_page, only: [:show, :edit, :update, :destroy]

  def new
    @retailer_page = RetailerPage.new
    @retailer_name = RetailerName.all.map {|retailer| [retailer.name, retailer.id]}
    some code

  def create
    @retailer_page = RetailerPage.new(retailer_page_params)
    some code


  def retailer_page_params
      params.require(:retailer_page).permit(:fname, :lname, :email, :contact, retailer_name_attributes: [:name, :id])
  end

各自的观点有:(this派上用场)

<%= f.select(:retailer_name_id, @retailer_name) %>

<div class="actions">
    <%= f.submit "Sign Up", name: "Sign Up" %>
  </div>

我想,当我提交时,在下拉菜单中选择的任何内容都应该存储为属于Model RetailerName的关联。

这可能吗?如果需要进行一些更改,请告诉我。我很欣赏。

我已提到Rails: multi level nested Forms (accepts nested attributes)

1 个答案:

答案 0 :(得分:2)

在这种情况下,不需要

accepts_nested_attributes。它用于[关联|编辑|创建]父表单中的其他记录。此外,它不能从关系的belongs_to方面起作用。

你的问题源于此。

retailer_page_params方法正在查找由于未在表单中正确设置而导致retailer_name_attributes不存在的情况。

retailer_name_id以表格形式提供,这就是您所需要的。

retailer_page_params更改为

params.require(:retailer_page).permit(:fname, :lname, :email, :contact, :retailer_name_id)

之后它应该可以工作。