2011-04-26 27 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 

我的tagmenu型号:

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 2011-04-26 06:51:30

+0

不,我有一个名为标记的模型 – 2011-04-26 06:53:43

+0

描述您的标记模型 – Sector 2011-04-26 14:31:56

回答

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

您的模型有一些相互冲突的陈述。首先定义:

attr_accessor ... :tag_tokens 

后来有:

attr_reader :tag_tokens 

给出的第一线,反之亦然因为以后你的二传手一个deinition这是没有必要的:

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

我没有看到tag_ids,因为它不是表中的列。您应该删除tag_tokensattr_accessor定义,然后为起始者定义tag_ids方法。

+0

我没有名为tag_ids的列。你能告诉我模型应该是什么样子吗? :) – 2011-04-26 07:57:24