2010-12-15 2 views
0

Я пытаюсь отправить параметр голосования на «вверх» на мой контроллер, чтобы он выполнял функцию голосования current_user.vote_exclusive_for (@book). Я использую большой палец вверх.Проводка к контроллеру через link_to

Я пытаюсь сделать это с помощью link_to, и правильные параметры отображаются на моем сервере, но он не работает с контроллером. Я должен что-то делать неправильно, но я не уверен, что. Нужно ли мне делать что-то другое с маршрутами, кроме книг: ресурсы?

Это мое действие голосование в books_controller

def vote 
    @book = Book.find(params[:id]) 
    if params[:vote] == 'up' 
     current_user.vote_exclusively_for(@book) 
    end 
     redirect_to @book 
end 

И это пример link_to на мой взгляд:

<%= link_to "Vote Up", :url => { :controller => "books", :action => "vote", :vote => "up"}, :method => :post %> 

Любые советы о том, где мои попытки разрушения было бы весьма признателен (дополнительная нота : когда я помещаю функцию current_user.vote_exclusive_for (@book) в мое представление, это работает), поэтому я думаю, что это проблема view/routes/link_to, а не сама функция.

+0

Что значит «не работает с контроллером»? Выполняется ли ваш код контроллера? Вы где-нибудь видите ошибку? Каков результат запуска «рейк-маршрутов»? – Samo 2010-12-15 16:17:08

ответ

3

Я не понимаю вашу ссылку. Кажется, что отсутствует идентификатор книги, в которую он голосовал?

Убедитесь, что ваш routes.rb файл выглядит следующим образом:

resources :books do 
    post :vote, :on => :member 
end 

Затем измените функцию link_to на это:

link_to "Vote Up", vote_book_path(@book, :vote => "up"), :method => :post 
+0

Я поставил вместо столбца в ресурсы, не уверен, почему это сработало ... но это так! Благодаря! – James 2010-12-15 19:30:32

0

Я просто имел подобную проблему и решить ее, используя этот стиль синтаксис:

<%= link_to "Vote Up", {:controller => "books", :action => :vote, :vote => "up" }, {:method => :post} %> 

Кроме того, убедитесь ваш routes.rb есть что-то похожее на

resources books do 
    post :vote 
end 
Смежные вопросы