在Rails中访问不同的模型元素

时间:2016-03-02 13:20:28

标签: ruby-on-rails

我对Rails(版本4.2.5)缺乏经验,并且很难处理视图访问数据库元素的方式。我已经完成了许多不同的教程,但仍然不明白为什么它不像我认为的那样工作!

我有使用引用设置的模型,我相信在数据库中建立外键。我想编辑数据库中属于不同模型的条目。

因此,Wines是引用Winemakers的模型。

class Wine < ActiveRecord::Base
   belongs_to :winemaker
end

在我的_edit_form.html.erb文件中,我有以下代码可以使用但不能提供我想要的内容:

<%= simple_form_for(@wine) do |f| %>
<div class="field">
  <%= f.label :winemaker_id %>
  <%= f.text_field :winemaker_id %>
</div>

这会生成一个简单的框,并在框中显示winemaker_id的整数,但我想要的是酿酒师的实际名称。我尝试了:winemaker_id.name@winemaker.name以及这些主题的许多变体,但我显然不明白这是如何运作的。我曾尝试阅读各种文档,但我不是更明智的。

有人可以用简单的语言解释访问不同模型的工作原理吗?

2 个答案:

答案 0 :(得分:1)

请尝试以下代码:

<%= simple_form_for(@wine) do |f| %>
  <div class="field">
    <%= f.label :winemaker_id %>
    <%= f.collection_select(:winemaker_id, Winemaker.all, :id, :name) %>
  </div>

有关详细信息,请查看http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select

答案 1 :(得分:1)

如果您的酿酒师模型定义如下:

class Winemaker < ActiveRecord::Base
  has_many :wines
end

这意味着您可以写下以下内容:

@winemaker.wines - returns all the wines belongs to a winemaker
@wine.winemaker  - returns the winemaker to whom the wine belongs

如果要显示和编辑Wine表单中的Winemaker名称,则可以使用 accepts_nested_attributes_for

来执行此操作

只需修改您的Wine模型,如下所示:

class Wine < ActiveRecord::Base
  belongs_to :winemaker
  accepts_nested_attributes_for :winemaker
end

现在,您可以按如下方式对表单进行少量更改:

<%= form_for @wine do |f| %>
  <%= f.fields_for :winemaker do |w|%>
    <%= w.text_field :name%>
  <% end %>
  <%= f.submit%>
<% end %>