Так что я использую отличный 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
и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} %>
Это, кажется, выглядеть хорошо для меня, а также URL-адрес читает хорошо, когда вы получите в форме, recipes/new?parent=112
, но я все еще получаю эту ошибку, должен быть способ передать этот параметр как родительский элемент вновь созданного объекта.
Как определить, что такое '@ parent'? –
будет ли это в моем новом или создании действия? –
Это будет в вашем действии create, вы определяете @parent как @parent = TreeNode.find (params [: parent_id]) ... это зависит от вас. –