Контроллеры, связанные с методами поиска

#ruby-on-rails-3

#ruby-on-rails-3

Вопрос:

У меня есть два контроллера, заказы и задачи — у каждого заказа много задач.

В моем представлении «Показать заказы» я перечисляю все связанные задачи для заказа.

Моя проблема в том, что я хочу ограничить вывод — например. перечислять только задачи со статусом = 1

В моем контроллере orders я попробовал это:

  @tasks = Task.find(:all, :conditions => [:status => '1'])
  

Но я получаю сообщение об ошибке:

 undefined method `%' for {:status=>"1"}:Hash
  

Я также действительно не знаю, как это вызвать. В представлении «Мои заказы» я попробовал это:

 <% @task.tasks.each do |task| %>
  <li>
    <%= task.title %> <%= task.dueddate %> 
  </li>
<% end %>
  

Можете ли вы помочь начинающему новичку 🙂

Ответ №1:

Вам действительно нужно проверить интерфейс запроса в rails 3

http://railscasts.com/episodes/202-active-record-queries-in-rails-3

http://railscasts.com/episodes/215-advanced-queries-in-rails-3

Кстати, ваше решение:-

  @tasks = Task.where(['status = ? ', 0])
  

Комментарии:

1. джейн, привет, это работает фантастически, и я смотрел железнодорожные трансляции. Каков наилучший способ сделать это с другого контроллера? Если я хочу составить список задач из заказов, я попробовал это: @tasks = Task.where([‘status = ? И order_id’, false, 1]) ? Jx

2. Моя ошибка… Необходимо использовать: @tasks = Task.where([‘status = ? И order_id = ?’, false, 1]) Глупый я!

Ответ №2:

Вот как я бы подошел к этому.

Модель задачи

 def Task
    belongs_to :order

    scope :status, lambda { |stat| where(:status => stat) }
end
  

OrdersController

 def show
    @order = Order.find(params[:id])
    @starting_tasks = @order.tasks.status(1).all
end
  

Просмотр /orders/show.html.erb

 <%= @starting_tasks.each do |task| %>
    <li><%= task.title %> <%= task.dueddate %></li>
<% end %>