我之前在这里问过这个问题: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)
答案 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)
之后它应该可以工作。