Ruby on rails Rails 4-多态关联&;路径

Ruby on rails Rails 4-多态关联&;路径,ruby-on-rails,ruby,polymorphic-associations,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的部分,它有: <s

我正在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>
在我的地址表中,我有一个国家/地区的输入字段:

                <%= f.input :country, priority: [ "Australia", "New Zealand", "United Kingdom" ] %>
那是因为我还没有为我的测试配置文件创建一个地址(我想)

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

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

<%= link_to "Add your location", edit_address_path(address) %>
这将允许您使用以下各项:

#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
#app/controllers/addresses_controller.rb
类地址控制器<应用程序控制器
操作前:设置用户
定义编辑
@地址=@user.addresses.find参数[:id]
结束
def更新
@地址=@user.addresses.find参数[:id]
@地址.更新
结束
私有的
def set_用户
@user=current_user#->假设您正在使用designe
结束
结束
我想您可能对嵌套路由感到困惑,但我需要查看路由才能确定。

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

<%= link_to "Add your location", edit_address_path(address) %>
这将允许您使用以下各项:

#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
#app/controllers/addresses_controller.rb
类地址控制器<应用程序控制器
操作前:设置用户
定义编辑
@地址=@user.addresses.find参数[:id]
结束
def更新
@地址=@user.addresses.find参数[:id]
@地址.更新
结束
私有的
def set_用户
@user=current_user#->假设您正在使用designe
结束
结束

我想您可能会对嵌套路由感到困惑,但我需要查看路由才能确定。

如果要添加地址,请尝试使用
新建地址路径
帮助程序,而不是
编辑地址路径
,但如果已经有地址,则应该对其进行编辑。是否有一种方法可以根据地址是否存在来调整帮助程序?当然,只需检查
user.addresses.empty?
,如果为true,则使用
新建帮助程序,如果为false,则使用
编辑帮助程序。如果要添加地址,尝试使用
new\u address\u path
helper而不是
edit\u address\u path
,但如果已经有地址,则应该对其进行编辑。是否有一种方法可以根据地址是否存在来调整帮助程序?当然,只需检查
user.addresses.empty?
,如果为true,请使用
new\u
帮助程序,如果为false,请使用
edit\u
帮助程序。Hi Rich。谢谢你。我不知道你为什么认为我有嵌套的路线。地址未嵌套在我的路由中。嗨,Rich。谢谢你。我不知道你为什么认为我有嵌套的路线。地址未嵌套在我的路由中。
#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