2012-05-30 12 views
0

Я использую рельсы 3.2, и я хочу предотвратить массовое присвоение. У меня родительские отношения.Пример родительской дочерней формы Rails, предотвращающий массовое присвоение

class Parent < ActiveRecord:Base 
    has_many :children 
    attr_accessible :name 
end 
class Child < ActiveRecord:Base 
    belongs_to :parent 
    attr_accessible :title 
end 

В моем ресурсе child.rb для маршрутов не вложен родительский ресурс. Теперь у меня есть ссылка для создания нового ребенка с new_child_path(@parent.id). Это направляет меня localhost:3000/child/new?parent_id=1 и я в конечном итоге в new действия:

def new 
    @child = Child.new 
    @parent = Parent.find(params[:parent_id]) 
    @child.parent = @parent 
end 

Мой вопрос: как написать мой _form.html.erb для дочернего объекта? Я не могу использовать f.hidden_field для parent_id, потому что в моем действии на создание он распался из-за массового присвоения. С другой стороны, мне нужно передать parent_id, чтобы узнать моего родителя, когда я спасу ребенка. Я не нашел для этого хорошего рабочего примера.

ответ

1

Вы должны прочитать вложенные ресурсы Rails.

Некоторые ссылки:

http://railscasts.com/episodes/139-nested-resources

- EDIT 1 -

Основываясь на ваш комментарий, не имея более одного уровня вложенности, вы можете также иметь следующую конфигурацию маршрута:

resources :grandparents do 
    resources :parents 
end 

resources :parents do 
    resources :children 
end 

Таким образом, вы все равно можете иметь родительские отношения с дочерними элементами без накладных расходов нескольких уровней вложенности. Вы могли бы также пространство имен контроллеров, чтобы держать вещи в чистоте, например:

resources :grandparents do 
    resources :parents, :controller => "grandparent/parent" 
end 

resources :parents do 
    resources :children 
end 
+0

Я прочитал http://guides.rubyonrails.org/routing.html#nested-resources, но я следовал правилу: Ресурсы никогда не должны быть вложенными более чем на 1 уровень, поэтому я сбросил свои вложенные ресурсы. –

+0

@ TomaszKalkosiński Обновленный ответ. – zsquare

+0

Это решает проблему наличия parent_id в моем URL-адресе при создании книги. Жаль, что эта практика маршрутов не пользуется большой популярностью. Спасибо. –

Смежные вопросы