我试图创建一个接受来自另一个模型的嵌套属性的表单。但是在控制器的新功能中我运行@ item.item_type.build并得到此错误
undefined method `build' for nil:NilClass
这是items_controller
中的新功能 def new
@item = Item.new
@item_gallery = @item.item_galleries.build
@item_type = @item.item_type.build
end
PARAMS:
def item_params
params.require(:item).permit(:title, :price, :description, item_galleries_attributes: [:id, :item_id, :image], item_type_attributes: [:id, :type, :item_id])
end
并在item.rb(模型)文件中:
has_many :item_galleries, dependent: :destroy
has_one :item_type
accepts_nested_attributes_for :item_galleries
accepts_nested_attributes_for :item_type
我基本上是尝试从表单下拉列表中设置项目类型。
示例:
<%= f.fields_for :item_types do |t| %>
<%= t.label :type %>
<%= t.select :type, options_for_select(["Type1", "Type2", "Type3"]), prompt: "Select One" %>
<% end %>
我们的想法是最终根据item_type
过滤项目答案 0 :(得分:4)
对于has_one关联,您使用build_association方法而不是association.build方法。有关详细信息,请参阅文档http://guides.rubyonrails.org/association_basics.html#the-has-one-association
@item_type = @item.build_item_type