Где разместить код «умного запроса» сделать базу данных в приложении rails? - PullRequest
0 голосов
/ 28 марта 2012

У меня есть что-то вроде этого:

на мой взгляд:

<%= 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 Я сделал что-то, как вы советовали ранее ... В моем контроллере перед рендерингом этого представления (которое, следовательно, будет отображаться частично) я нахожу этого сотрудника и помещаю его во флэш-память [: selection] [: employee] ... У этого сотрудника есть много столбцов, таких как: first_name, last_name, ... и, наконец, employee_id. Последний employee_id является менеджером текущего сотрудника (flash [: selection] [: employee]). Я хочу показать все поля сотрудника в моем частичном. Поэтому я передал flash [: selection] [: employee], как employee, частичному, а затем показал там все такие вещи, как: employee.first_name, ... И, наконец, я хочу показать, что employee.employee_id не похож на integer id, но на самом деле находит в базу данных корреспондента сотрудника и внесите его имя и фамилию ... Хорошо, перед отображением моего представления я могу установить не только @employee, но и его @manager, а затем передать эти значения моему частичному ... Но ... кажется, что это "слишком много сделано, чтобы показать в одном месте имена и фамилии этого @ менеджера ... Я прав? или это обычное использование в рельсах, не так ли?

Ответы [ 3 ]

1 голос
/ 28 марта 2012

Я бы поместил его в контроллер, который отображает это представление.Инициализируйте переменную экземпляра в вашем действии контроллера, и это будет доступно из вашего представления и частичных действий.Примерно так:

@employee = Employee.find(...)

В последней версии Rails передать эту переменную экземпляра в партиал будет так же просто, как:

<%= render 'show', :employee => @employee %>

Тогда в партиале вы сделаете:

<p>
  <b>Manager:</b>
  <%= employee.first_name %> <%= employee.last_name %>
</p>
0 голосов
/ 29 марта 2012

Спасибо всем, я решил проблему, предоставив следующую ассоциацию:

class Employee < ActiveRecord::Base
  #...

  belongs_to :manager, :class_name => "Employee", :foreign_key => "employee_id"
end

, а затем сделать соответствующий звонок из частичного:

employee.manager.first_name
0 голосов
/ 28 марта 2012

Вы правы. Вы не должны использовать искатели в представлениях. Инициализируйте переменную, с которой представление должно работать в контроллере.

http://guides.rubyonrails.org/action_controller_overview.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...