Rails 3 - Как редактировать один вложенный полиморфный ресурс? - PullRequest
1 голос
/ 30 января 2012

В моем приложении Rails 3.0 у меня есть модель Client и модель полиморфных адресов. Согласно приведенному ниже коду клиент может иметь много адресов. Я хотел бы, чтобы моя форма обновляла один адрес клиента за раз. Может показаться, что [address_attributes] появляется только тогда, когда я разрешаю редактировать все адреса клиента одновременно Есть ли способ обойти это?

class Client < ActiveRecord::Base
 has_many :addresses, :as => :addressable, :dependent => :destroy
 accepts_nested_attributes_for :addresses

class Address < ActiveRecord::Base
  belongs_to :addressable, :polymorphic => true

Контроллер клиентов

  def edit
    @client = Client.find(params[:id])
    @addresses = @client.addresses
    if params[:address]
      @address = @client.addresses.find(params[:address])
    else
      @addresses ? @address = @addresses.first : @address = []
    end
  end

   def update
     @client = Client.find(params[:id])
     @client.update_attributes(params[:client])
     redirect_to client_path(@client)
   end

View

<%= form_for @client do |f| %>
  <%= render :partial => 'form', :locals => {:f => f} %>

  <%= f.fields_for @address  do |addresses_attributes| %>
     <%= render :partial => 'addresses/fields', :locals => {:f => addresses_attributes} %>             
  <% end %>

  <%= f.submit %>
<% end %>

1 Ответ

0 голосов
/ 30 января 2012

EDIT:

Извините, я перечитал пост и понял, что есть лучшие варианты. Вы должны добавить область действия в модель адреса или создать отдельные ассоциации в клиенте, используя условия.

http://railscasts.com/episodes/108-named-scope или посмотрите условия здесь: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

ДЕТАЛЬ:

class Address < ActiveRecord::Base
  belongs_to :addressable, :polymorphic => true
  named_scope :type_one, :conditions => { :address_type => 'one' }
  named_scope :type_two, :conditions => { :address_type => 'two' }

<%= f.fields_for @address.type_one  do |addresses_attributes| %>
  <%= render :partial => 'addresses/fields', :locals => {:f => addresses_attributes} %>             
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...