2009-11-02 2 views
0

Donc j'utilise l'excellent Ancestry gem Mais si la documentation semble très complète je ne comprends pas comment passer le paramètre de mon élément dont je veux être le parent de mon élément nouvellement créé. Tout d'abord, je veux le faire dans l'action new ou create ... permettez-moi d'expliquer. Par exemple: (avec certaines actions enlevées par souci de concision)Utilisation des paramètres dans mon contrôleur

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 

donc à savoir que je ne sais pas où créer l'ascendance, les docs disent:

... Vous pouvez utiliser l'attribut parent pour organiser vos enregistrements dans un arbre. Si vous avez l'ID de l'enregistrement que vous souhaitez utiliser en tant que parent et que vous ne voulez pas le récupérer, vous pouvez également utiliser parent_id. Comme tout peut être définir des attributs modèle virtuel, et parentparent_id utilisant parent= et parent_id= sur un document ou en les incluant dans le hachage passé à new, create, create!, update_attributes et update_attributes!. Par exemple:

TreeNode.create! :name => 'Stinky', :parent => TreeNode.create!(:name => 'Squeeky') 

Je veux savoir ce que mon show contrôleur ressemblent à me permettent de définir le parent de l'@person quand je les crée. Donc, je suis coincé, je ne sais pas quoi faire d'autre ici ... mais de toute façon, je sais que cette gemme est similaire à la plus populaire acts_as_tree, toute aide est très appréciée!


Mise à jour

je pense avoir presque mais quand j'essaie pour mon 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 

-je obtenir:

Couldn't find Recipe without an ID


Mise à jour

Mon point de vue a un lien vers l'action new qui ressemble à ceci <%= link_to "fork this recipe", {:controller => "recipes", :action => "new", :parent => @recipe} %>

Cela semble regarder bien pour moi, aussi l'url lit bien quand vous arrivez à la forme, recipes/new?parent=112, mais je reçois toujours cette erreur, il doit y avoir un moyen pour que ce paramètre soit passé en tant que parent de l'objet nouvellement créé.

Répondre

0

Si cela fonctionne comme acts_as_tree alors je suppose que vous pouvez faire quelque chose comme ceci:

@parent.children.create(attributes) 

qui va créer un nouvel objet enfant avec l'ensemble des parents, peu importe ce que disent les attributs.

+0

Comment est-ce que je définirais ce que '@ parent' est? –

+0

serait-ce dans ma nouvelle ou créer une action? –

+0

Ce serait dans votre action de création, vous définissez @parent comme @parent = TreeNode.find (params [: parent_id]) ... c'est à vous de décider. –

0

Selon les documents que vous avez collé que vous pouvez faire:

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

Vous pouvez également inclure dans le hachage params pour l'utilisateur - votre soumission de formulaire devra avoir params [: user] [: parent_id]:

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

Donc, ça ne fait pas partie d'une forme, j'ai un 'link_to' qui va amener l'utilisateur à un nouveau formulaire, l'instance qu'ils créent ici sera un enfant de l'élément qui a le' link_to 'à ce sujet. –

+0

Comme ultimatly id aiment faire une route imbriquée, quelque chose dans le genre de 'people/12/new' Cela ferait une nouvelle personne avec 12 en tant que parent, des idées? –

Questions connexes