我正在使用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
那是因为我还没有为我的测试资料制作地址(我认为)。
如果单击编辑链接(如查找或创建),是否可以创建新地址?我该如何设置?
答案 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
感到困惑,但我需要确定路线是否正确。