Rails 以 DRY 形式链接模型

Posted

技术标签:

【中文标题】Rails 以 DRY 形式链接模型【英文标题】:Rails link models in a form DRY 【发布时间】:2014-02-10 01:55:45 【问题描述】:

我正在尝试在我的应用程序中链接多个 Rails 模型。我试图让用户使用表单对产品创建评论。我正在尝试使用 rails DRY 原则。

我首先用 bat namemodel yearimage 制作了一个 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 形式链接模型的主要内容,如果未能解决你的问题,请参考以下文章

Rails 库目录

在链接到 Rails 中的模型视图时需要一些帮助

如何让模型验证与 Rails 中的视图层对话以提供简单的功能?

以 DRY 方式创建活动/存档模型 (Django)

设计注销链接问题(Rails 4)

对链接进行 ajax 调用单击以更新链接本身(Ruby on Rails)