我对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
以及这些主题的许多变体,但我显然不明白这是如何运作的。我曾尝试阅读各种文档,但我不是更明智的。
有人可以用简单的语言解释访问不同模型的工作原理吗?
答案 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 %>