Ruby on rails 传递嵌套关系的参数

Ruby on rails 传递嵌套关系的参数,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我在传递参数时遇到问题 我的应用程序设置如下: Fact belongs_to Source Source has_many Facts 源嵌套在路由中的用户下 我正在使用事实表单创建源数据。因此,我在事实模型中使用了getter和setter方法,如下所示: def source_name source.try(:name) end def source_name=(name) self.source = source.find_or_create_by_name(name) if

我在传递参数时遇到问题 我的应用程序设置如下:

Fact belongs_to Source
Source has_many Facts
源嵌套在路由中的用户下

我正在使用事实表单创建源数据。因此,我在事实模型中使用了getter和setter方法,如下所示:

def source_name
  source.try(:name)
end

def source_name=(name)
  self.source = source.find_or_create_by_name(name) if name.present?
end
这很好,但是它没有为父用户属性设置用户id。因此,将创建源,但它们与用户不关联

我在表单中有一个带有user\u id的隐藏字段,但user\u id仍在设置中。传递和保存用户id以便设置嵌套关系的最简单方法是什么

以下是源控制器的创建方法:

def create
  @user = User.find(params[:user_id])
  @source = @user.source.build(params[:source])
...
end

如果您的用户只有一个
源代码
,请尝试以下方法作为
create()
方法:

def create
  @user = User.find params[:user_id]
  @user.source = Source.new params[:source]

  if @user.save
    redirect_to @user, :flash => { :success => "Source updated!" }
  else
    flash[:error] = "Failed to update the source!"
    render :action => "new"
  end
end

用户
对象上创建
作为属性,然后保存
用户
对象,应该会自动将
用户

关联。我认为问题在于,您直接从事实模型中的setter方法创建源。除非在FactController中使用类似build的方法建立链,否则不会设置用户id。在SourceController中执行的操作也需要在FactsController中执行。此外,在使用build命令时,似乎仅为直接父级设置ID。您可以尝试以下方法:

def create
  @source = current_user.sources.find_or_create_by_name(params["source_name"])
  @fact = @source.facts.build(:user_id  => @source.user_id)
  ....
end

希望有帮助。

在问题中添加控制器的创建操作不确定我是否理解正确,但您不应该通过用户模型访问或设置源代码吗?像user.source=xxxI一样,Facts模型下有一个多模型表单。我已经尝试使用常规输入和使用字段来设置表单中的源。我似乎无法让它以任何方式存储用户id。希望这是有意义的。有一个rails cast,其设置与我的非常相似()。但是Ryan的更简单,因为它没有同时设置的用户模型。一个用户有一个
还是多个