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, etparent
parent_id
utilisantparent=
etparent_id=
sur un document ou en les incluant dans le hachage passé ànew
,create
,create!
,update_attributes
etupdate_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éé.
Comment est-ce que je définirais ce que '@ parent' est? –
serait-ce dans ma nouvelle ou créer une action? –
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. –