设计嵌套形式,has_many关系

时间:2013-08-07 17:47:16

标签: ruby-on-rails devise

应用程序/模型/ post.rb

class User < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
  accepts_nested_attributes_for :posts
  attr_accessible ... :posts_attributes

...

app / models / post.rb

class Post < ActiveRecord::Base
  belongs_to :user
  has_one :user

...

应用程序/视图/后/新

<% form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>

  <div><%= f.label :username %><br />
  <%= f.text_field :username, :autofocus => true %></div>

  <div><%= f.label :email %><br />
  <%= f.email_field :email %></div>

  <div><%= f.label :password %><br />
  <%= f.password_field :password %></div>

  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></div>



  <%= f.fields_for :posts do |post_fields| %>

        <%= post_fields.label :title %><br />
        <%= post_fields.text_field :title %></div>
...

的routes.rb

resources :posts

一,用户注册作品的表格。但是帖子部分没有出现在当前配置中。如果我切换fields_for:posts到fields_for:post,我会得到完整的表单,但在提交后我得到错误“无法批量分配受保护的属性”。

现在,如果我添加:发布到attr_accessible,我收到错误“unknown parameter post”

如果我要将其移动到用户控制器,我该如何覆盖默认的设计控制器?那甚至重要吗?

2 个答案:

答案 0 :(得分:1)

您还必须将attr_accessible定义到Post模型中。

应用程序/模型/ post.rb

class Post < ActiveRecord::Base
  belongs_to :user
  has_one :user
  attr_accessible :title

end

请将此添加到您的控制器方法:

resource.posts.build

希望这会有所帮助。感谢

答案 1 :(得分:0)

我添加了&lt;%resource.posts.build%&gt;在我的形式之前,这是有效的。