【问题标题】:Correct way to nest form for join model?为连接模型嵌套表单的正确方法?
【发布时间】:2012-03-20 19:07:13
【问题描述】:

我正在尝试在我的产品展示视图中通过连接模型为我的 Producttracklisting has_many 嵌套一个表单。这样做的正确方法是什么?我因各种失败的尝试而遇到各种错误。 型号如下:

class Product < ActiveRecord::Base
  has_many :producttracklistings
  has_many :tracks, :through => :producttracklistings
end

class Track < ActiveRecord::Base
  has_many :producttracklistings
  has_many :products, :through => :producttracklistings
end

class Producttracklisting < ActiveRecord::Base
  belongs_to :product
  belongs_to :track
end

表格如下:

<%= form_for(@producttracklisting) do |f| %>
  <%= f.label :track_id %>
  <%= f.text_field :track_id %>
  <%= f.label :product_id %>
  <%= f.text_field :product_id %>
  <%= f.submit %>
<% end %>

我正在尝试将其引入产品/展示中:

 <%= render 'producttracklistings/form' %>

通过以上所有内容,我得到了一个“NilClass:Class 的未定义方法 `model_name'”

提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    您要查找的是 accepts_nested_attributesfields_for 的组合。 有关详细教程,请参阅此 RailsCast Part 1part 2

    PS: 我建议将您的模型命名为 ProductTrackListing,这会产生一个名为 product_track_listings 的表。这更具可读性和“轨道方式”

    【讨论】:

    • 实际上,我不确定这就是我所追求的,我想我可能误用了“嵌套”这个词。我要做的就是将 Producttracklisting 表单单独引入产品展示视图,以便我可以将跟踪与该产品相关联。我基本上计划运行一个循环来显示带有“添加到产品”按钮的每个曲目。这在 producttracklisting/new 视图中完美运行。
    • 啊...我明白了。好的,错误“未定义方法model_name for NilClass:Class”意味着它无法通过form_for调用中的给定变量解析模型名称(ergo @producttracklisting未设置)。因此,要使用相同的形式,您必须在控制器中设置此变量,即使用 @producttracklisting = @product.producttracklistings.build 左右...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多