Использование параметров в моем контроллере - PullRequest
0 голосов
/ 02 ноября 2009

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

Ответы [ 2 ]

0 голосов
/ 02 ноября 2009

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

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

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

@user = User.create(params[:user])
0 голосов
/ 02 ноября 2009

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

@parent.children.create(attributes)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...