Rails 以 DRY 形式链接模型
Posted
技术标签:
【中文标题】Rails 以 DRY 形式链接模型【英文标题】:Rails link models in a form DRY 【发布时间】:2014-02-10 01:55:45 【问题描述】:我正在尝试在我的应用程序中链接多个 Rails 模型。我试图让用户使用表单对产品创建评论。我正在尝试使用 rails DRY 原则。
我首先用 bat name
、model year
和 image
制作了一个 bat 表。然后我创建了一个制造商表,其中只列出了蝙蝠制造商的名称。我的蝙蝠模型belongs_to :manufacturer
和我的制造商模型has_many :bats
。
不是使用manufacturer
创建多个表,(每个球棒至少列出制造商名称 3 次)如何将我的两个模型链接在一起?
我的表单提交给review
模型。在表格中我已经有了<%= f.collection_select :bat_id, Manufacturer.all, :id, :manufacturer, include_blank: true %>
,它在下拉菜单中列出了所有可能的制造商。 但是,提交时没有提交到评论表单中的:bat_id
参数。
--一个猜测是在bat模型中将manufacturer_id
整数存储为manufacturer_id
列下的整数(注意:已经这样做了,但我不知道如何在表单中提交? )
--另一种猜测是蝙蝠模型继承自制造商模型
非常感谢任何帮助
我的完整表格:
<%= form_for(@review) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field" align= "center">
<h3>Select bat</h3>
<%= f.collection_select :bat_id, Manufacturer.all, :id, :manufacturer, include_blank: true %>
<h3>What do you like about this bat?</h3>
<%= f.text_area :pros, placeholder: "Enter what you like..." %>
<h3>What do you not like about this bat?</h3>
<%= f.text_area :cons, placeholder: "Enter what you don't like..." %></br>
</div>
<div align="center">
<%= f.submit "Add Review", class: "btn btn-large btn-info" %>
</div>
<% end %>
【问题讨论】:
【参考方案1】:根据文档 http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select
collection_select 中的参数应该是:
f.collection_select(:post, :author_id, Author.all, :id, :name_with_initial, 提示: true)
post 是模型,author_id 是属性
或者你可以尝试使用:
=f.select(:bat_id, options_from_collection_for_select(@manufacturers,"id","manufacturer", f.对象。 bat_id),)
并把
@manufacturers = Manufacturer.all
在控制器内部
【讨论】:
我无法让它与:review
一起使用。它说“NoMethodError”+“未定义的方法`merge' for :manufacturer:Symbol”
您好,您是否尝试过使用我示例中的“f.select”?
我刚试了一下,下拉框出现了,但是没有向review
表提交任何东西以上是关于Rails 以 DRY 形式链接模型的主要内容,如果未能解决你的问题,请参考以下文章