0

我已经搜索了 SO 和互联网很长一段时间,但一直无法弄清楚这一点。我有一个模型项目,它总是有一个 TimerSetting。不涉及连接表。

在新的项目表单中,我尝试使用嵌套属性来创建 TimerSetting 记录。想不通这部分。

模型中的相关代码:

项目模型:

class Project < ActiveRecord::Base
    attr_accessible :timer_setting_id

    has_one :timer_setting
    accepts_nested_attributes_for :timer_setting
end

定时器设置模型:

class TimerSetting < ActiveRecord::Base
    attr_accessible :rounding_method, :round_to

    belongs_to :project
end

在项目控制器中:

def new
    @project.new
    @project.build_timer_setting
end

在视图中:

<%= form_for @project, {remote: true, format: 'json'} do |f| %>
    ... other stuff ...
    <%= f.fields_for :timer_setting do |ts| %>
      Rounding Method <%= ts.check_box :rounding_method %>
      Round To <%= ts.text_field :round_to %>
    <% end %>
<% end %>

当我调用渲染表单(项目/新)的路线时,rails 说:unknown attribute: project_id. 如果我在项目控制器中注释掉该行

#@project.build_timer_setting

它会呈现表单,但f.fields_for :timer_setting不会输出块中的字段。

任何建议/帮助将不胜感激!

4

1 回答 1

0

您的 TimerSetting 需要一个 project_id。您的项目不需要 timer_settings_id,因为 rails 会通过 TimerSetting 模型的 project_id 找到它。

于 2013-03-05T09:56:00.300 回答