2012-02-25 20 views
0

NilClass的形式,我下面this教程爲模型創建標籤(在我的情況下,模型後):未定義的方法'合併」的零:使用text_field_tag

控制器/ posts_controller.rb:

def create 
    @user = current_user 
    @post = @user.posts.new(params[:post]) 

    if @post.save 
     redirect_to @post, notice: 'post was successfully created.' 
    else 
     render action: "new" 
    end 

    @post.tag!(params[:tags]) 
    end 

的意見/職位/ _form.html.erb:

<%= form_for(@post) do |f| %> 
    <%= render 'shared/error_messages' %> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :content %><br /> 
    <%= f.text_area :content %> 
    </div> 
    <div class="field"> 
    <%= f.label :tags %> 
    <%= f.text_field :tags, params[:tags] %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 

的意見/職位/ show.hmtl.erb:

<div class="tags"> 
    <h4>Tags:</h4> 
    <%= render @post.tags %> 
</div> 

型號/ post.rb:

class Post < ActiveRecord::Base 
    has_and_belongs_to_many :tags 

    def tag!(tags) 
    tags = tags.split(" ").map do |tag| 
     Tag.find_or_create_by_name(tag) 
    end 
    self.tags << tags 
    end 
end 

型號/ tag.rb:

class Tag < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
end 

db/migrate /(etc ...)_ create_tags.rb:

class CreateTags < ActiveRecord::Migration 
    def change 
    create_table :tags do |t| 
     t.string :name 
    end 

    create_table :tags_posts, :id => false do | t | 
     t.integer :tag_id, :post_id 
    end 
    end 
end 

現在,當我訪問的職位形成我得到這個錯誤:當我瀏覽一個帖子

undefined method `merge' for nil:NilClass 
Extracted source (around line #13): 

10: </div> 
11: <div class="field"> 
12:  <%= f.label :tags %> 
13:  <%= f.text_field :tags, params[:tags] %> 
14: </div> 
15: <div class="actions"> 
16:  <%= f.submit %> 

我得到這個錯誤:

SQLite3::SQLException: no such table: posts_tags: SELECT "tags".* FROM "tags" INNER JOIN "posts_tags" ON "tags"."id" = "posts_tags"."tag_id" WHERE "posts_tags"."post_id" = 7 
Extracted source (around line #24): 

21: 
22:  <div class="tags"> 
23:  <h4>Tags:</h4> 
24:  <%= render @post.tags %> 
25:  </div> 
26: 
27: </div> 

但我確實有這些表正如你可以在我的schema.rb中看到的文件:

create_table "tags", :force => true do |t| 
    t.string "name" 
    end 

    create_table "tags_posts", :id => false, :force => true do |t| 
    t.integer "tag_id" 
    t.integer "post_id" 
    end 

任何建議來解決這個問題?

回答

2

你的表名向後。 HABTM按字母順序查找模型。仔細查看錯誤。它說posts_tags找不到。你創建tags_posts。所以將你的表名改爲posts_tags。

+0

謝謝,這就像在教程中,奇怪。現在我可以看到一篇文章,但仍然得到'nil:NilClass'的未定義方法'合併'。任何建議來解決這個問題? – alexchenco 2012-02-25 07:18:41

1

在您的部分_form.html.erb中試試這個<%= f.text_field_tag :tags, params[:tags] %>

+0

我得到這個'未定義的方法'text_field_tag'爲#'如果我將其更改爲'f.text_field_tag'我正在使用Rails 3.2。 – alexchenco 2012-02-25 07:24:37

+0

'has_and_belongs_to_many:tags'必須位於'posts.rb'而不是tags.rb正如本書所說的 – uday 2012-02-25 07:35:39

0

以防其他人通過谷歌遇到這個老問題: 您需要使用'value:'作爲默認值的簡單形式。

<%= f.text_field :tags, value: params[:tags] %> 
相關問題