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



我之前在这里问过这个问题:从控制器向具有本机模型的另一个模型提交其他表单

并得到了一些答案,

借助这些答案,我提出了一些解决方案和一些问题。问题是这样的:

我有 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)

之后它应该可以工作。

最新更新