2

型号:嵌套属性返回质量分配错误

class Topic < ActiveRecord::Base 
    has_many  :posts, :dependent => :destroy 
    validates  :name, :presence => true, 
        :length => { :maximum => 32 } 
    attr_accessible :name, :post_id 
end 

class Post < ActiveRecord::Base 
    belongs_to :topic, :touch => true 
    has_many :comments, :dependent => :destroy 
    accepts_nested_attributes_for :topic 
    attr_accessible :name, :title, :content, :topic, :topic_attributes 
end 

查看:

<%= simple_form_for :post, :url => { :controller => :posts, :action => "create" } do |f| %> 
    <h1>Create a Post</h1> 
    <%= f.input :name, :label => false, :placeholder => "Name" %> 
    <%= f.input :title, :label => false, :placeholder => "Title" %> 
    <%= f.input :content, :label => false, :placeholder => "Content", :as => :text %> 
    <%= f.simple_fields_for :topic do |topic_form| %> 
    <%= topic_form.input :name, :label => false, :placeholder => "Topic" %> 
    <% end %> 
    <%= f.button :submit, "Post" %> 
<% end %> 

控制器:

def create 
    topic_name = params[:post].delete(:topic) 
    @topic = Topic.find_or_create_by_name(topic_name) 
    @post = Post.new(params[:post]) 
    @post.topic = @topic 
    respond_to do |format| 
    if @post.save 
     format.html { redirect_to(@post, :notice => 'Post was successfully created.') } 
    else 
     format.html { render :action => "new" } 
    end 
    end 
end 

当我填写并提交/职位/新形式终端读取:

Started POST "/posts" for 127.0.0.1 at 2011-05-06 18:30:10 -0700 
    Processing by PostsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"Gg2T18NRiYMe5UMReSfvwwiDTQSrjdnjiEdyDcP1MuI=", "post"=>{"name"=>"25", "title"=>"25", "content"=>"25", "topic"=>{"name"=>"25"}}, "commit"=>"Post"} 
    Topic Load (0.2ms) SELECT "topics".* FROM "topics" WHERE "topics"."name" = '25' LIMIT 1 
    AREL (0.9ms) INSERT INTO "topics" ("name", "created_at", "updated_at") VALUES ('25', '2011-05-07 01:30:10.237406', '2011-05-07 01:30:10.237406') 
    Topic Load (0.7ms) SELECT "topics".* FROM "topics" ORDER BY updated_at DESC 
    AREL (0.8ms) INSERT INTO "posts" ("name", "title", "content", "topic_id", "created_at", "updated_at") VALUES ('25', '25', '25', 25, '2011-05-07 01:30:10.406437', '2011-05-07 01:30:10.406437') 
    AREL (0.3ms) UPDATE "topics" SET "updated_at" = '2011-05-07 01:30:10.415141' WHERE "topics"."id" = 25 
Redirected to http://0.0.0.0:3000/posts/25 
Completed 302 Found in 281ms 

我试着在Topic模型中添加:post_attributesattr_accessible,但是这不能解决它。它可能是形式吗?

+0

我根据@monocle和@rafaelfranca提出的建议更新了代码但是我仍然收到相同的错误。在进行这些更改后,我确实重新启动了服务器,以防万一有人问。感谢您的帮助,我非常感谢。 – BasicObject 2011-05-06 01:11:13

回答

1

您不应该使用simple_fields_for作为主题吗?

simple_form_for @post do |f| 
    f.simple_fields_for :topic do |topic_form| 
    topic_form.input :name 
    end 
end 
0

它在simple_form中不是错误。您应该将post_id添加到Topic模型中可访问的属性中。该代码也会在控制台中失败。