如何构建Rails链接以便单击它将更新ActiveRecord属性

时间:2014-07-24 20:20:36

标签: ruby-on-rails activerecord

我有两个模型,一个属性模型和一个应用程序模型。应用程序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代码,以便它可以做我想做的事情吗?

1 个答案:

答案 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