我之前在这里问过这个问题:从控制器向具有本机模型的另一个模型提交其他表单
并得到了一些答案,借助这些答案,我提出了一些解决方案和一些问题。问题是这样的:
我有 2 个模型,我提交表格的模型 A 属于另一个模型 B。现在,模型 B 显示为选择下拉标记。
我希望此表单提交并关联模型 A 中的每个新条目 并自动参考模型 B 的 ID。这是简短的版本。故事是这样展开的:
模型 A 是零售商页面
class RetailerPage < ActiveRecord::Base
..some code..
belongs_to :retailer_name
accepts_nested_attributes_for :retailer_name
end
型号 B 是零售商名称
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
各自的观点有:(这派上用场了(
<%= f.select(:retailer_name_id, @retailer_name) %>
<div class="actions">
<%= f.submit "Sign Up", name: "Sign Up" %>
</div>
我希望,当我提交时,无论我在下拉菜单中选择什么,都应该存储为属于模型零售商名称的关联。
这可能吗?如果需要一些更改,请告诉我。我不太欣赏这一点。
我参考了Rails:多级嵌套表单(接受嵌套属性(
在这种情况下不需要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)
之后它应该可以工作。