2017-04-02 60 views
0

我目前正在学习Ruby on Rails,而且我陷入了一件非常简单的事情。我已经试图谷歌它(或查看它在这里),但我找不到正确的答案(由于我的RoR开始它可能会用错误的术语搜索)。Ruby on Rails:将不同控制器的动作包含到另一个控制器的索引视图中

我在一个小的学习项目的工作,列出不同的项目(items_controller)。这些项目中的每一个都属于一个类别。但因为我希望用户创建,更新或删除一个类别,我创建了一个categories_controller。控制器和视图都工作正常,但我想包括我的项目控制器的索引视图(这也是root_path)上的每个项目的类别。在这里,我被卡住了(使用代码和它背后的逻辑)。做这个的最好方式是什么?

不知怎的,我设法类别名称进入items_controller的edit.html.erb形式,但我真的不知道如何:

items_controller:

def edit 
    @item = Item.find(params[:id]) 
    @categories = Category.all.map{ |c| [c.name, c.id] } 
end 

edit.html .erb(这实际上是在_form.html.erb和edit.html.erb渲染):

<%= simple_form_for @item, :html => { :multipart => true } do |f| %> 
    <%= f.select :category, @categories %> 
    <%= f.input :title %> 
    <%= f.input :url %> 
    <%= f.button :submit %> 
<% end %> 

回答

0

如果您要包括的每个项目的类别,你需要指定的C哪一列ategories表您想要显示。示例:名为name的列:

<% @items.each do |item| %> 
<%= item.category.name %> 
<% end %> 
+0

谢谢!已经有了,但我误解了错误。所以我包含了一个“if item.category”,现在它可以工作。 –

+0

@ChristophBerger你可以使用'try()'方法看起来像:'item.try(:category).try(:name)'而不是检查一个类别。 –

相关问题