Использование Ajax для замены элемента страницы на основе события Onclick

Я переформулирую этот вопрос, поскольку теперь я лучше понимаю проблему.

У меня есть приложение с четырьмя моделями: пользователи, продукты, сорта и сезоны.

пользователь
has_many :seasons
has_many :products, :through => :seasons
has_many :varieties, :through => :seasons

Товар
has_many :seasons
has_many :users, :through => :seasons
has_many :varieties

разнообразие
belongs_to :product
has_many :seasons
has_many :users, :through => :seasons

Сезоны
belongs_to :product
belongs_to :user
belongs_to :variety

В представлении "продукт / шоу" я перечисляю каждый сорт, доступный для конкретного продукта, и пользователей, которые несут этот конкретный продукт.

При первой загрузке страницы продукта / шоу я отображаю всех пользователей, которые несут продукт, выполнив следующие действия:

<% @product.seasons.each do |c| %>  
  <%= link_to c.user.name, c.user %>  
<% end %>

Я также перечисляю варианты, доступные для продукта, делая это:

<% @product.varieties.each do |c| %>  
  <%= link_to_remote variety.name, :url => variety_path(variety) %>  
<% end %>  

Вот где должен произойти Аякс. Когда я нажимаю на название сорта, я хочу заменить цикл @product.seasons на @iety.seasons. Я думаю, что это должно отображать только тех пользователей, которые имеют именно это разнообразие. Так что это будет выглядеть так:

<% @variety.seasons.each do |c| %>  
  <%= link_to c.user.name, c.user %>  
<% end %>     

Я все ближе, но не могу заставить это работать. В настоящее время, когда я нажимаю на разнообразие, на интерфейсе ничего не происходит. В журнале я получаю это:

Processing VarietiesController#4 (for ip at 2009-09-24 16:02:29) [POST]
  Parameters: {"authenticity_token"=>"9pDgKrHNbg0aMklsQsGl5BQa34bfr0Ft8Fpbxki3XXw="}
ActionController::UnknownAction (No action responded to 4. Actions: check_vendor_role, index, and show)  

Журнал ссылается на № 4 и ссылается на 4 как действие. 4 - идентификатор разновидности предмета, на который я нажал.

Вот мои настройки:

ProductsController # показать
@product = Product.find (params [: id])
@variety = @product.variety @users = @product.users

Вид продукта / шоу # Списки пользователей, у которых есть этот продукт

<div id="userList">  
  <%= render :partial => "products/users" %>  
</div>  

#Lists the varieties available for this product  

<% @product.varieties.each do |variety| %>  
  <%= link_to_remote variety.name, :url => variety_path(variety) %>  
<% end %>  

VarietiesController# показать.

  def show
   @variety = Variety.find(params[:id])
    respond_to do |format|
      format.html
      format.xml  { render :xml => @variety}
      format.js
    end
  end

сорта / show.js.rjs
@ page.replace_html "userList",:partal => "products/users",:collection => @iversity.users

Таким образом, в настоящее время страница отображает и отображает соответствующий HTML и данные. Но онклик не работает. Когда я нажимаю на разнообразие, приложение не обрабатывает запрос должным образом, и список пользователей не изменяется.

Обновить

Ответ на комментарий Анатолия:

Я не уверен, какой именно маршрут нужно добавить. Я попытался добавить следующее, но результат был таким же, как и раньше:

map.resources: variety,:member => {:show =>:get }

Не могли бы вы более конкретно указать, какой маршрут участника должен называться?

2 ответа

Решение

Как указано в комментариях (которые должны быть указаны в качестве ответа):

Добавьте:method =>: получите к своему вызову link_to_remote, чтобы использовать правильный HTTP-глагол для "show" для этого URL.

be be

Другие вопросы по тегам