2011-04-26 11 views
0

私のモデルでは保存したくないという問題があります。タグのトークンフィールド入力があります。 http://railscasts.com/episodes/258-token-fieldsRailsの多対多トークンのヘルプ

私は新しいkonkurrancer作成しようとすると、私はこのエラーを取得:

NoMethodError in Admin/konkurrancersController#create 

undefined method `class_name' for nil:NilClass 

Rails.root: C:/Rails/konkurranceportalen 
Application Trace | Framework Trace | Full Trace 

app/models/konkurrancer.rb:15:in `tag_tokens=' 
app/controllers/admin/konkurrancers_controller.rb:48:in `new' 
app/controllers/admin/konkurrancers_controller.rb:48:in `create' 

http://pastie.org/1834194 

Request 

Parameters: 

{"utf8"=>"✓", 
"authenticity_token"=>"yo7wcAQl81tx3zZpPP44ENPYzYRZLpgyYKY+HK3yFKM=", 
"konkurrancer"=>{"name"=>"Vind en rejse", 
"banner2"=>"asdasd", 
"tracking"=>"sadasd", 
"vaerdi"=>"12222", 
"tid"=>"1 min", 
"tag_tokens"=>"1", 
"bedom"=>"2", 
"kategori_id"=>"9", 
"form"=>"Nyhedsbrev", 
"partner"=>"Iqmedier", 
"udtraekkes(3i)"=>"30", 
"udtraekkes(2i)"=>"4", 
"udtraekkes(1i)"=>"2011", 
"udtraekkes(4i)"=>"08", 
"udtraekkes(5i)"=>"26", 
"arrangeor"=>"", 
"note"=>""}, 
"commit"=>"Opret konkurrence"} 

マイkonkurrancerモデル:

class Konkurrancer < ActiveRecord::Base 
attr_accessible :name, :tag_tokens 
    has_many :tagsmenus 
    has_many :tags, :through => :tagsmenus 
attr_reader :tag_tokens 

    def tag_tokens=(ids) 
    self.tag_ids = ids.split(",") 
    end 

end 

私のタグモデルを 私はトークンの入力については、このガイドに従っています:

class Tag < ActiveRecord::Base 
has_many :tagsmenus 
has_many :konkurrancers, :through => :tagsmenus 
has_friendly_id :name, :use_slug => true 
before_save :assign_cached_slug, :unless => :cached_slug? 

protected 
    def assign_cached_slug 
    self.cached_slug = self.name.gsub(/\s+/, '_').gsub(/[^\w\-]/, '') 
    end 

end 

マイタグメニューモデル:

class Tagsmenu < ActiveRecord::Base 
end 

マイコントローラ:

def new 
@konkurrancer = Konkurrancer.new 
respond_to do |format| 
format.html # new.html.erb 
format.xml { render :xml => @konkurrancer } 
end 
end 
    # POST /konkurrancers 
    # POST /konkurrancers.xml 
    def create 
    @konkurrancer = Konkurrancer.new(params[:konkurrancer]) 

    respond_to do |format| 
     if @konkurrancer.save 
     format.html { redirect_to(:admin_konkurrancers, :notice => 'Konkurrancer was successfully created.') } 
     format.xml { render :xml => :admin_konkurrancers, :status => :created, :location => @konkurrancer } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @konkurrancer.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

私が参加し、テーブルとモデルを作成し、また私のタグモデルとの関係を追加しました。

+0

モデルに 'tag_ids'というフィールドがありますか? – Wes

+0

なしIモデルという名前のタグ –

+0

が、私は解決策は、あなたがあなた自身の答え:) – Sector

答えて

0
class Tagsmenu < ActiveRecord::Base 
    belongs_to :konkurrancer 
    belongs_to :tag 
end 
0

モデルにはいくつかの矛盾する記述があります。あなたが最初の定義:

attr_accessor ... :tag_tokens 

を後で持っている:

def tag_tokens(ids) 
    self.tag_ids = ids.split(',') 
end 
:最初の行与え、またはその逆、後であなたがセッターのためのdeinitionを持っていることを考える必要はありません

attr_reader :tag_tokens 

tag_idsがテーブル内の列でないと指定されていません。おそらくtag_tokensattr_accessorの定義を削除してから、tag_idsの方法を定義してください。

+0

私はtag_idsという名前の列を持っていません。私のモデルがどのように見えるか私に見せてもらえますか? :) –

関連する問題