Ruby on rails 拥有并属于RubyonRails上的许多东西

Ruby on rails 拥有并属于RubyonRails上的许多东西,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我已经创建了两个表domaine和startup。我还创建了一个连接表domaine\u启动程序,并将这两个表与has\u和\u BELTEN\u方法链接起来。在我的新启动中,我允许用户选择一个域,现在我想获得一个域id,并将其放在domaine_启动中。我这样做: 创建方法: def create @startup = Startup.new(params[:startup]) @joindre.domaine_id=(params[:domaine]) @joindre.startup_

我已经创建了两个表domaine和startup。我还创建了一个连接表domaine\u启动程序,并将这两个表与has\u和\u BELTEN\u方法链接起来。在我的新启动中,我允许用户选择一个域,现在我想获得一个域id,并将其放在domaine_启动中。我这样做:

创建方法:

  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”

我怎样才能修好它?对不起,我英语不好 编辑 ++++++++++++++++++++++++++++++++++++++ 以下是我的模型文件:

域名:

class Domaine < ActiveRecord::Base
has_and_belongs_to_many :startups
end
创业公司:

class Startup < ActiveRecord::Base
has_and_belongs_to_many :domaines
end

正如马克·托马斯所说,一定要通读他发布的文章

在您的新方法中,您试图创建一个类型为domaine_startup的新对象,并且您收到了一个错误,我假设错误在这个方法中,但是您没有显示完整的错误消息,因此无法确定。我猜这个名字拼错了;也许是Domain_startup或DomainStartup?请记住,在Ruby中,类名和其他常量必须以大写字母开头,而方法名和变量则以小写字母开头。这不仅仅是一个编码约定,它是强制性的。因此,Ruby最终会尝试搜索具有该小写名称的方法或变量,而不是您想要的正确类名

关于你的create方法,我不太确定你的@joindre对象是从哪里来的,但我感觉你相信它在新方法中创建时仍然存在。您必须记住,这些方法是从两个单独的操作分别执行的,一旦操作完成处理,所有内容都将被清除并消失。换句话说,@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

这是将新域对象添加到启动对象的域列表中的最简单方法。

我认为您不理解联接表的概念。你能编辑这个问题并展示你的模型吗?那么我们可以更好地帮助你。另外,请参见。我只是添加了一个模型文件。你能看一下吗?谢谢马克·托马斯你能帮帮我吗?我照你说的做了