我创建了2个表domaine和startup。我还创建了一个连接表domaine_startup,并且我已经将这两个表与has_and_belong_to方法相关联。在我的新创业中,我允许用户选择一个域名,现在我想得到一个domaine id ant把它放在domaine_startup上。我这样做了:
创建方法:
def create
@startup = Startup.new(params[:startup])
@joindre.domaine_id=(params[:domaine])
@joindre.startup_id=(params[:startup])
respond_to do |format|
if @startup.save
format.html { redirect_to(@startup, :notice => 'Startup was successfully created.') }
format.xml { render :xml => @startup, :status => :created, :location => @startup }
else
format.html { render :action => "new" }
format.xml { render :xml => @startup.errors, :status => :unprocessable_entity }
end
end
端
这是新的方法:
def new
@startup = Startup.new
@domaines = Domaine.all
@joindre = domaine_startup.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @startup }
end
端 但是我收到了以下错误:未定义的局部变量或方法`domaine_startup'用于#
我该如何解决? (对不起,我的英语不好) 编辑 ++++++++++++++++++++++++++++++++++++++ 以下是我的模型文件:
domaines:
class Domaine < ActiveRecord::Base
has_and_belongs_to_many :startups
end
新创:
class Startup < ActiveRecord::Base
has_and_belongs_to_many :domaines
end
答案 0 :(得分:1)
正如马克·托马斯所说,绝对要通读他发布的guide。
在您的new
方法中,您正在尝试创建domaine_startup
类型的新对象,并且您收到错误(我假设错误是在此方法中,但您有没有显示完整的错误消息,因此无法确定。)我猜这个名字拼错了;也许它是Domaine_startup
或DomainStartup
?请记住,在Ruby中,类名和其他常量必须以大写字母开头,而方法名称和变量以小写字母开头。这不仅仅是一种编码惯例,它是强制性的。所以最终,Ruby正在尝试搜索具有该小写名称的方法或变量,而不是正确的类名,这是您的意图。
关于你的create
方法,我不太确定你的@joindre
对象来自哪里,但我有一种感觉,你相信它在new
创建时仍然存在{1}}方法。您必须记住,这些方法是从两个单独的操作中单独执行的,一旦操作完成处理,所有内容都会被清除并消失。换句话说,@joindre
方法中不再存在create
。
我建议改为:
@startup = Startup.new(params[:startup])
@startup.domaines << Domaine.new(params[:domaine]) # Create new Domaine
或者,如果该域名已经在数据库中:
@startup = Startup.new(params[:startup])
@startup.domaines << Domaine.find(params[:domaine]) # Retrieve existing Domaine
这是向Domaine
对象的域名列表中添加新Startup
对象的最简单方法。