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的更简单,因为它没有同时设置的用户模型。一个用户有一个源
还是多个源
?