#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 %>