我有两个模型,一个属性模型和一个应用程序模型。应用程序has_many属性,属性belongs_to application。因此,Property模型有一个" application_id" field,表示与属性关联的Application。
我希望在属性显示页面上显示所有可能应用程序的列表,并在应用程序上显示一个链接,如果单击该链接,则只需将属性模型中的application_id更新为该应用程序的ID。 / p>
这是我的相关代码:
视图/属性/ show.html.erb
Choose an application template:
<ol class="microposts">
<% @owner.application.each do |template| %>
<li><%= link_to "Application #{template.id}", :controller => "properties", :action => "update", :method => :put, :application_id => template.id %></li>
<% end %>
</ol>
修改 - 添加相关的属性控制器代码
def show
@property=Property.find(params[:id])
@owner=User.find(Property.find(params[:id]).user_id)
end
def update
@property=Property.find(params[:id])
if @property.update_attributes(property_params)
flash[:success] = "Application added"
redirect_to @property #going to change these redirects; this is just to get it working for now
else
redirect_to @property
end
end
private
def property_params
params.require(:property).permit(:address, :zip_code, :application_template_id)
end
但是,这并不起作用。有人可以帮助我调整link_to代码,以便它可以做我想做的事情吗?
答案 0 :(得分:1)
有趣的问题!
你想要做这样的事情:
#config/routes.rb
resources :properties do
patch ("update_app/:application_id") #-> domain.com/properties/2/update_app/4
end
这将允许您致电:
#app/views/properties/show.html.erb
<%= link_to "Update", property_update_app_path(application_id), method: :patch %>
-
如果您使用上述链接,您将能够按如下方式使用控制器:
#app/controllers/properties_controller.rb
Class PropertiesController < ApplicationController
def update_app
@property = Property.find params[:id]
@property.update({application_id: params[:app_id]})
end
end