2009-11-02 4 views
0

Так что я использую отличный 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, но я все еще получаю эту ошибку, должен быть способ передать этот параметр как родительский элемент вновь созданного объекта.

ответ

0

Если он работает как acts_as_tree, то я буду считать, что вы можете сделать что-то вроде этого:

@parent.children.create(attributes) 

Какой будет создать новый дочерний объект с родительским набором, независимо от того, что говорят атрибуты.

+0

Как определить, что такое '@ parent'? –

+0

будет ли это в моем новом или создании действия? –

+0

Это будет в вашем действии create, вы определяете @parent как @parent = TreeNode.find (params [: parent_id]) ... это зависит от вас. –

0

Согласно документации, что вы наклеенными вы можете сделать:

#... 
@user = User.new(params[:user]) 
@user.parent_id = @parent_user.id 
@user.save 
#... 

Вы также можете включить его в Params хэш для пользователя - ваше представление формы должны были бы иметь Params [: пользователя] [: parent_id]:

@user = User.create(params[:user]) 
+0

Так что это не часть формы, у меня есть 'link_to', который приведет пользователя к новой форме, созданный здесь экземпляр будет дочерним элементом элемента, у которого была ссылка' link_to 'на нем. –

+0

Как ультимативный идентификатор, как сделать его вложенным маршрутом, что-то вроде строк 'people/12/new' Это сделает нового человека с 12 родителями, идеями? –