如何在Rails 3中描述像“问题有状态”之类的关系?

时间:2011-06-29 21:58:23

标签: ruby-on-rails database ruby-on-rails-3 relationships

我正在开发Rails 3中的“问题跟踪器”应用程序,但我无法描述“问题”与其“状态”之间的关系。每个问题只能有一个状态 - 我希望这是一个HTML组合框 - 但显然每个状态都可以分配给多个问题。我从“问题有一个状态”开始,但后来我遇到了在视图中检索该状态的问题。我认为这是正确的,但我还需要别的......

3 个答案:

答案 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 :statusStatus has_many :issues代替。

当您使用has_one关联时,Rails将在issue_id表中查找外键statuses。这不是你想要的。您希望问题指向状态,而不是相反。