Сохранить идентификатор принадлежащий_ в форме, не используя скрытое поле? - PullRequest
0 голосов
/ 28 сентября 2011

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

Можете ли вы придумать лучший способ добиться сохранения идентификатора родителя (без использования скрытого поля)?

Вот фрагмент моих маршрутов ...

resources :kids
resources :parents do
  resources :kids
end

Вот моя родительская модель ...

class Parent < ActiveRecord::Base
  has_many :kids
  accepts_nested_attributes_for :kids
end

Вот моя детская модель ...

class Kid < ActiveRecord::Base 
  belongs_to :parent, :autosave => true
end

Вот форма моего взгляда при создании нового ребенка ...

<%= form_for(@kid) do |f| %>
%= f.hidden_field :parent_id, :value => @parent.id %>
<%= f.label :title, 'Title' %>
<%= f.submit %>
<% end %>

Который затем передается методу создания (POST) ...

def create
    @kid = Kid.new(params[:kid])
    @parent = Parent.find(@kid.parent_id)
    @kid.save
    # etc...
end

Ответы [ 3 ]

3 голосов
/ 28 сентября 2011

Если вы отбросите первую строку вашего примера маршрутов, просто наберите

resources :parents do
  resources :kids
end

Теперь у вас нет двусмысленности при вызове KidsController без родителя.Ваш маршрут совпадает с

/parents/:parent_id/kids

Теперь в вашем KidsController вы можете выполнить

def create
  @parent = Parent.find(params[:parent_id])
  @parent.kids.create( params[:kid] )
  #...
end

Новому ребенку автоматически назначается родительский элемент, когда вы создаете его с помощью коллекции has_many

1 голос
/ 28 сентября 2011

Да Вложенные ресурсы - один из хороших способов, но в вашем случае вы также можете использовать «field_for».

0 голосов
/ 28 сентября 2011

Если вы не хотите передавать его как скрытое поле, я бы рекомендовал использовать вложенных ресурсов , вы можете оставить parent_id в URL и указать parents/1/kids в качестве пути,Затем в KidsController вам нужно загрузить родительский ресурс и связать его с Kid

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