我有这样的事情:
在我看来:
<%= render :partial => 'show', :locals => { :employee => flash[:selection][:employee] } %>
在我的部分'节目'中:
<p>
<b>Manager:</b>
<%= Employee.find(employee.employee_id).first_name %> <%= Employee.find(employee.employee_id).last_name %>
</p>
问题: 我觉得从模型中询问某些东西(例如:Employee.find(employee.employee_id).first_name)并不是一个好方法...而且在某个视图中也似乎......是不是? 我应该在哪里将“智能请求”的代码放到数据库中,然后我应该如何从部分调用它?
UPD1 我做了像你之前建议的事情...... 在我的控制器中渲染该视图(因此将呈现部分视图)之前,我找到了这个员工并将其放入flash [:selection] [:employee] ... 此员工有很多列,例如:first_name,last_name,...,最后是employee_id。后一个employee_id是当前员工的经理(flash [:selection] [:employee])。 我想在我的部分中显示所有员工的字段。所以我将flash [:selection] [:employee]像员工一样传递给partial,然后在那里显示所有的东西:employee.first_name,...最后我想显示这个employee.employee_id不像整数id,但实际找到在数据库通讯员工,并把它的名字和姓氏... 在渲染我的视图之前,我不仅可以设置@employee,还可以设置它的@manager,然后将这些值传递给我的部分... 但是......这似乎有点“太多了,只是为了在一个地方展示这个@经理的名字和姓氏...... 我对吗?或者这是rails中的常见用法,不是吗?
答案 0 :(得分:1)
我会把它放在呈现该视图的控制器中。在控制器操作中初始化一个实例变量,这可以从您的视图和部分中访问。像这样:
@employee = Employee.find(...)
在最新版本的Rails中,将该实例变量传递给部分变量非常简单:
<%= render 'show', :employee => @employee %>
然后在你的部分中,你会这样做:
<p>
<b>Manager:</b>
<%= employee.first_name %> <%= employee.last_name %>
</p>
答案 1 :(得分:0)
你是对的。您不应该在视图中使用查找程序。初始化视图需要在控制器中使用的变量。
http://guides.rubyonrails.org/action_controller_overview.html
答案 2 :(得分:0)
感谢所有人,我解决了这个问题,提供了以下关联:
class Employee < ActiveRecord::Base
#...
belongs_to :manager, :class_name => "Employee", :foreign_key => "employee_id"
end
然后从partial发出相应的电话:
employee.manager.first_name