Использование 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 %>  

Вот где должен произойти Ajax. Когда я нажимаю на название сорта, я хочу заменить цикл @ product.seasons на @iversity.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 # show
@product = Product.find (params [: id])
@varumes = @ product.variversity @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 %>  

VaritiesController # show.

  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",: partial => "products / users",: collection => @iversity.users

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

Обновлять

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

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

map.resources: разновидности,: member => {: show =>: get}

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


person Community    schedule 23.09.2009    source источник


Ответы (2)


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

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

person Community    schedule 25.09.2009
comment
Да! Это была проблема. Спасибо. - person MikeH; 26.09.2009

‹Div id =" userList "> должен быть‹ div id = "users">

person Anatoliy    schedule 24.09.2009
comment
Это была опечатка в моем вопросе. Я починил это. Есть другие идеи? - person MikeH; 25.09.2009
comment
В config / routes.rb следует объявить соответствующее действие в разделе: member контроллера (чтобы избежать ошибки UnknownAction 4. На действие не ответили 4.) - person Anatoliy; 25.09.2009
comment
Я добавил обновление, чтобы следить за этим. Я не совсем уверен, какой маршрут, по вашему мнению, следует добавить. - person MikeH; 25.09.2009
comment
Думаю, я нашел проблему. Ajax по умолчанию использует POST, но ваши маршруты ожидают GET, вы должны исправить такую ​​ссылку:: html = ›{: method =›: get} (я не уверен в синтаксисе, но в основном идея) - person Anatoliy; 25.09.2009