Rails:链接更改一个属性然后返回

时间:2010-06-18 16:06:32

标签: ruby-on-rails ruby activerecord

Rails新手在这里。

我有一个items列表,其中status可以用整数表示(现在只有1 =有效0 =无效)。

我想要的是每个item链接旁边的一个链接,用于更改该项目的status。所以它可能看起来像这样:

  

一个不错的项目 - 启用

     

另一个漂亮的项目 - 禁用

我想不出如何使链接工作。我只是希望用户点击该链接,然后页面刷新并item更新。

这不起作用:

<%= link_to "Enable", :controller => "items", :action => "update", :status => 1 %>

2 个答案:

答案 0 :(得分:1)

我会做类似

的事情
# view
<% @items.each do |item| %>
   # ...
   link = link_to_remote((item.active? "Disable" : "Enable"), :url => {
      :controller => "items", :action => "swap_status", :id => item.id
   })
   <%= item.name %> - <%= link %>
<% end %>


# item model
class Item < ActiveRecord::Base
   # ...    
   def active?
      self.status == 1
   end
end

# items controller
class ItemsController < ApplicationController
   # ...
   def swap_status
      item = Item.find(params[:id])
      new_status = item.active? ? 0 : 1
      item.update_attribute(:status, new_status)
      # and then you have to update the link in the view,
      #    which I don't know exactly how to do yet.
   end
end

我知道它不完整......但我希望它能以某种方式帮助你:]

答案 1 :(得分:1)

如果您实现了默认的rails控制器,那么<​​/ p>

<%= link_to "Enable", :controller => "items", :action => "update", :status => 1 %>

无效,因为在更新操作rails调用

@item.update_attributes(params[:item])

并且状态将作为

进入控制器
params[:status]

除此之外,要调用update,方法必须是PUT。

尝试将链接更改为:

<%= link_to "Enable", :controller => "items", :action => "update", :method => :put :item => {:status => 1} %>