我正在开发Rails 3中的“问题跟踪器”应用程序,但我无法描述“问题”与其“状态”之间的关系。每个问题只能有一个状态 - 我希望这是一个HTML组合框 - 但显然每个状态都可以分配给多个问题。我从“问题有一个状态”开始,但后来我遇到了在视图中检索该状态的问题。我认为这是正确的,但我还需要别的......
答案 0 :(得分:2)
在这种情况下,问题属于某种状态:
class Issue
belongs_to :status
end
将状态视为每个问题所属的类别类型。
答案 1 :(得分:1)
如果您不允许自定义状态,则将所有状态'作为常量数组(用于选择)和问题中的status
字符串字段更有意义。您仍然可以列出具有范围的状态的所有问题。
class Issue
STATUSES = [ "Open", "Closed" ]
scope :with_status, lambda { |status| where(:status => [*status]) }
end
在视图中,
<%= f.select :status, Issue::STATUSES %>
您需要数据库中的字段。所以在迁移中:
add_column :issues, :status, :string
要在控制器中查找状态问题:
@open_issues = Issue.with_status("Open").all;
@current_issues = Issue.with_status([ "Pending", "Waiting on Review"]).all;
或与协会:
@closed_issues = @project.issues.with_status("Closed");
答案 2 :(得分:1)
您应该使用Issue belongs_to :status
和Status has_many :issues
代替。
当您使用has_one
关联时,Rails将在issue_id
表中查找外键statuses
。这不是你想要的。您希望问题指向状态,而不是相反。