如何在控制器中正确调用模型

时间:2014-04-30 15:05:33

标签: ruby-on-rails activerecord

我的厨师模型通过chef_id链接到我的膳食模型。我正在显示有关厨师的信息,并且还想显示有关他的膳食的信息。我无法弄清楚在控制器中调用它的正确方法。有什么想法吗?

厨师控制员:

def index
    @chefs=Chef.paginate(page: params[:page])
    @meals = ????? Cant figure out how to call this
end 

Index.html.erb

<div class = 'chef'>
    <div class = 'row'> 


               <% @chefs.each do |chef| %>
                <%= render chef %>

            <% end %>


    </div>
</div>
<%= will_paginate %>

_chef partial

<div class = 'span4'>
    <div class = 'chef-box'>
        <h2><center><%= link_to chef.name, chef %></center></h2>
        <h2><center>"<%= chef.description %>"</center></h2>
        <h2><center><%= THIS IS WHERE I WANT TO DISPLAY INFORMATION ON MEALS %></center></h2>
    </div>
</div>

2 个答案:

答案 0 :(得分:1)

如果您只想访问@meals,那么您只需获取@chef的实例:

@meals = @chef.meals 

鉴于您已在association类中定义了Chef,如下所示:

class Chef < ActiveRecord::Base
  has_many :meals

  #rest of the code
end

查看有效记录关联here

所以,这里我只是举例说明如何在视图中使用它,你可能需要纠正它: 在_chef partial

<div class = 'span4'>
    <div class = 'chef-box'>
        <h2><center><%= link_to chef.name, chef %></center></h2>
        <h2><center>"<%= chef.description %>"</center></h2>
              <% chef.meals.each do |meal| %>
                 <h2><center><%= meal.information %></center></h2>
            <% end %>
    </div>
</div>

您需要在上面的示例代码中调用正确的膳食属性。

答案 1 :(得分:1)

如前所述 - 首先要确保在您的厨师模型中设置关系:

class Chef < ActiveRecord::Base
  has_many :meals
end

然后你可以拨打任何Chef.meals,无论你的控制器是否为:

def index
  @chef = Chef.paginate(page: params[:page])
  @meals = @chef.meals
end

或者只是在你看来:

<div class = 'span4'>
    <div class = 'chef-box'>
        <h2><center><%= link_to chef.name, chef %></center></h2>
        <h2><center>"<%= chef.description %>"</center></h2>
        <h2>Has <%= pluralize(chef.meals.size, 'meal') %></h2>
        <% chef.meals.each do |meal| %>
          <% meal.name %>
        <% end %>
    </div>
</div>

值得注意的是 - 由于Chef是型号名称,因此您应该能够更加干净地呈现_chef.html.erb

<div class = 'chef'>
    <div class = 'row'> 
      <%= render @chef %>
    </div>
</div>
<%= will_paginate %>

请注意,@chef与您的控制器匹配是单数,如果您在控制器中设置了什么,您也可以将其传递给<%= render @chefs %>,它会做分别渲染每位厨师。