我希望能够根据模型的当前状态循环遍历模型。
我为我的模型创建了相当简单的状态,如下所示:
models/job.rb
class Job < ActiveRecord::Base
has_many :events, class_name: "JobEvent"
STATES = %w[bids in_progress complete canceled]
delegate :bids?, :in_progress?, :complete?, :canceled?, to: :current_state
def current_state
(events.last.try(:state) || STATES.first).inquiry
end
end
和
models/job_event.rb
class JobEvent < ActiveRecord::Base
belongs_to :job
attr_accessible :state
validates_presence_of :job_id
validates_inclusion_of :state, in: Order::STATES
def self.with_last_state(state)
order("id desc").group("job_id").having(state: state)
end
end
状态有效 - 我可以很好地改变状态。我希望能够根据模型的当前状态循环遍历模型。不确定解决此问题的最佳方法。我是范围界定的新手,我正在尝试按如下方式遍历我的状态(不工作):
views/index.html.erb
<% @current_state_jobs.each do |job| %>
<tr>
<td><%= link_to job.job_number, job %></td>
</tr>
<% end %>
看起来上面的方法可行 - 但我收到以下错误:undefined method 'each' for nil:NilClass
我应该关注范围还是将每个状态定义为控制器中的方法?也许我应该在循环的开头放一个 if then 语句?有什么想法或推荐阅读吗?
--- 更新 --- 找到解决方案 ---
我最终在我的控制器索引方法中为每个状态添加了实例。然后在我的索引中添加一个选项卡式视图,以一次循环遍历每个状态。
例如:
class JobsController < ApplicationController
def index
@all = Job.where(:state => ['bids', 'in_progress', 'complete']) #all job states
@bids = Job.where(:state => ['bids'])
... and so on for each state
...