在铁轨上的红宝石上有许多东西

时间:2013-12-28 15:26:38

标签: ruby-on-rails ruby activerecord

我创建了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

1 个答案:

答案 0 :(得分:1)

正如马克·托马斯所说,绝对要通读他发布的guide

在您的new方法中,您正在尝试创建domaine_startup类型的新对象,并且您收到错误(我假设错误是在此方法中,但您有没有显示完整的错误消息,因此无法确定。)我猜这个名字拼错了;也许它是Domaine_startupDomainStartup?请记住,在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对象的最简单方法。