Rails: ссылка меняет один атрибут и затем возвращается - PullRequest
0 голосов
/ 18 июня 2010

Rails новичок здесь.

У меня есть список items, в котором status может быть представлен целым числом (сейчас его просто 1 = активный 0 = неактивный).

Я хочу, чтобы рядом с каждой item была ссылка для изменения status этого элемента.Так что это может выглядеть так:

Хороший предмет - Включить

Еще один симпатичный предмет - Отключить

Не могу придумать, как сделатьссылка работает.Я просто хочу, чтобы пользователь щелкнул ссылку, а затем страница обновилась и item обновилась.

Это не работает:

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

Ответы [ 2 ]

1 голос
/ 19 июня 2010

Если у вас реализован контроллер rails по умолчанию, этот

<%= 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} %>
1 голос
/ 18 июня 2010

Я бы сделал что-то вроде

# 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

Я знаю, что это неполно ... но я надеюсь, что это поможет вам как-то:]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...