所以我使用优秀的Ancestry gem但是虽然文档看起来非常完整,但我不明白如何传递我想要成为新创建元素的父元素的参数。首先,我想在new
或create
行动中执行此操作...请允许我解释一下。例如:(为简洁起见,删除了一些操作)
class PeopleController < ApplicationController
#...
def new
@person = Person.new
end
def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = "Registration Successful."
redirect_to root_url
else
render :action => 'new'
end
end
end
因此我不知道在哪里创建祖先,文档说:
...您可以使用parent属性将记录组织到树中。如果您具有要用作父级的记录的ID,并且不想获取它,则还可以使用
parent_id
。与任何虚拟模型属性一样,parent
和parent_id
可以使用记录上的parent=
和parent_id=
进行设置,也可以将它们包含在传递给new
的哈希中,create
,create!
,update_attributes
和update_attributes!
。例如:
TreeNode.create! :name => 'Stinky', :parent => TreeNode.create!(:name => 'Squeeky')
我想知道我的控制器显示的内容,以便在创建时允许我设置@person的父级。
所以否则我被卡住了,我不知道还有什么要做的......但无论如何,我确实知道这个宝石类似于更受欢迎的acts_as_tree
,任何帮助都非常感激!
更新
我想我几乎拥有它,但是当我为create action
def create
@parent = Recipe.find(params[:parent])
@recipe = Recipe.new(params[:recipe], :parent => @parent.id) do |recipe|
recipe.user_id = current_user.id
end
if @recipe.save
current_user.has_role!(:owner, @recipe)
redirect_to @recipe
else
render :action => 'new'
end
end
我明白了:
Couldn't find Recipe without an ID
更新
我的观点包含指向此new
<%= link_to "fork this recipe", {:controller => "recipes", :action => "new", :parent => @recipe} %>
操作的链接
这似乎对我来说很好,当你到达表单recipes/new?parent=112
时,url读得很好但是我仍然得到那个错误,必须有一种方法让该参数作为新创建的对象的父级。
答案 0 :(得分:0)
如果它像acts_as_tree
那样工作,那么我会假设你可以这样做:
@parent.children.create(attributes)
无论属性说什么,都将使用父集创建一个新的子对象。
答案 1 :(得分:0)
根据您粘贴的文档,您可以执行以下操作:
#...
@user = User.new(params[:user])
@user.parent_id = @parent_user.id
@user.save
#...
您也可以将其包含在用户的params哈希中 - 您的表单提交需要有参数[:user] [:parent_id]:
@user = User.create(params[:user])