Rails 4 - 多态关联&路径

时间:2015-12-29 03:02:55

标签: ruby-on-rails ruby polymorphic-associations

我正在使用rails 4制作应用程序。

我有3个型号:用户,个人资料和地址。

协会是:

user.rb

has_one :profile

profile.rb

belongs_to :user
has_many :addresses, as: :addressable

address.rb

belongs_to :addressable, :polymorphic => true

在我的地址视图文件夹中,我有一个名为_location.html.erb的部分文件,其中包含:

<span class="sideinfo">
    <% if @country_name.present? %>
        <%= @country_name %> 
    <% else %>
        <span class="profileeditlink">
            <%= link_to "Add your location", edit_address_path %>
        </span>
    <% end %>       
</span>

在我的个人资料展示页面中,我将位置部分呈现为:

<%= render 'addresses/location' %>

在我的地址模型中,我有一个方法:

 def country_name
    self.country = ISO3166::Country[country]
    country.translations[I18n.locale.to_s] || country.name
  end

在我的地址表单中,我有一个国家的输入字段:

                <%= f.input :country, priority: [ "Australia", "New Zealand", "United Kingdom" ] %>

我试图弄清楚如何创建一个编辑位置路径,让用户从个人资料显示页面更新其位置(country_name)。

我已尝试在上面的位置部分中设置的格式。当我这样做时,我收到了这个错误:

Couldn't find Address with 'id'=1

那是因为我还没有为我的测试资料制作地址(我认为)。

如果单击编辑链接(如查找或创建),是否可以创建新地址?我该如何设置?

1 个答案:

答案 0 :(得分:0)

如果您想编辑现有地址,则需要传递您要编辑的对象的id

<%= link_to "Add your location", edit_address_path(address) %>

-

相应的路线和控制器应如下所示:

#config/routes.rb
resources :addresses #-> url.com/addreses/:id/edit

这将允许您使用以下内容:

#app/controllers/addresses_controller.rb
class AddressesController < ApplicationController
   before_action :set_user

   def edit
      @address = @user.addresses.find params[:id]
   end

   def update
      @address = @user.addresses.find params[:id]
      @address.update
   end

   private

   def set_user
      @user = current_user #-> assuming you're using Devise
   end
end

我认为您对nested routes感到困惑,但我需要确定路线是否正确。