在create上设置has_one关联的初始ID

时间:2014-04-12 01:51:43

标签: ruby-on-rails

首次尝试Rails关联,我无法使以下代码正常工作。我的目标是将报告状态初始设置为记录ID 1.状态表中的记录1是“打开”。我稍后会将其更改为2,因此它是'CLOSED'。

模型设置如下;

class Report < ActiveRecord::Base
  has_one :status
end

class Status < ActiveRecord::Base
  belongs_to :reports
end

报告控制器具有以下代码,我无法正常工作;

  def create
    @report = Report.new(report_params)
    @report.create_status(1)

    if @report.save
      redirect_to @report
    else
      render 'new'
    end
  end

我知道问题出在@report.create_status(1)但是我无法找到关于互联网的任何清晰度。我显然没有找对地方。

此外,我的routes.rb配置如下,但我不确定这是否是最正确的方式;

  resources :reports do
    resources :comments
    resource :status
  end

UandI的回答纠正了我的问题。有关信息,我对如何配置has_one和belongs_to关联感到困惑。我把它们颠倒了,在我的情况下它们应该如下;

class Report < ActiveRecord::Base
  belongs_to :status
end

class Status < ActiveRecord::Base
  has_one :reports
end

1 个答案:

答案 0 :(得分:2)

假设您要分配的状态为“OPEN”状态,且其列名为column_name

替换以下行:

`@report.create_status(1)`

用这个

@report.status = Status.find_by_column_name('OPEN')

在上面的行中,将column_name替换为状态列的名称OPEN

E.G。如果您的列的名称是status_name,那么该行将变为@report.status = Status.find_by_status_name('OPEN')