【问题标题】:Rails 3 - How to edit single nested polymorphic resource?Rails 3 - 如何编辑单个嵌套的多态资源?
【发布时间】:2012-01-30 01:06:57
【问题描述】:

在我的 Rails 3.0 应用程序中,我有一个客户端模型和一个多态地址模型。根据下面的代码,客户端可以有多个地址。我希望我的表单一次更新一个客户地址。如果我允许同时编辑所有客户的地址,我似乎只能让 [addresses_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

查看

<%= 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 %>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 nested edit polymorphism


    【解决方案1】:

    编辑:

    抱歉,我重读了这篇文章,发现还有更好的选择。您应该向地址模型添加范围,或者您应该使用条件在客户端中创建单独的关联。

    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 %>
    

    【讨论】:

    • 谢谢,Wilhelm 您能否更明确地解释一下如何做到这一点以及我需要对我的模型、控制器和视图进行哪些更改?
    • 我假设您想按多态类型进行拆分。我把细节放在上面的答案中。
    • 我可能把你弄糊涂了,但我不相信我想按多态类型进行拆分。我有一个具有三个不同地址的客户。每个的“addressable_type”字段是“客户端”。我的问题是,如果我希望他们能够自己编辑他们的第一个地址,我无法让 *_attributes 位出现。
    • Gocha。您可以在字段上显示:无,然后通过 JS 显示您想要的。您如何决定让客户编辑哪个地址?
    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2011-05-23
    相关资源
    最近更新 更多