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