Rails 3: ": method =>: post" не работает ... кажется, что 'GET', когда он должен 'POST' - PullRequest
6 голосов
/ 26 января 2011

Я пытаюсь реализовать «Дружбу» в моем приложении на Rails 3, как описано в Railscast 163: Самоссылочная ассоциация

У меня все настроено, как описано. Я использую базовую модель пользователя, которая входит в систему с Authlogic, которая работает нормально. Однако, когда я пытаюсь добавить друга, используя следующую ссылку:

<% for user in @users %>   
 <%=h user.username %> 
  <%= link_to "Add Friend", friendships_path(:friend_id => user), :method => :post %>     
<% end %>

Я получаю перенаправление на http://localhost:3000/friendships?friend_id=2 и Неизвестное действие. Не удалось найти действие 'index' для ошибки FriendshipsController без дальнейшего объяснения. Это особенно странно, так как у меня есть жестко закодированное перенаправление назад к методу «User # show» для моего текущего пользователя (то есть перенаправление обратно в профиль после добавления друга).

Если это поможет, вот мой метод "Friendship # Create":

def create  
  @friendship = current_user.friendships.build(:friend_id => params[:friend_id])  
  if @friendship.save  
    flash[:notice] = "Added friend."  
    redirect_to :controller => 'users', :action => 'show', :id =>'current_user'
  else  
    flash[:notice] = "Unable to add friend."  
    redirect_to :controller => 'users', :action => 'show', :id =>'current_user' 
  end  
end

Есть идеи, что может быть причиной этого? Я обнаружил, что у кого-то возникла подобная проблема, но я не смог найти определенное решение: Rails 3 и Модели дружбы

Заранее спасибо за помощь!

~ Dan

Ответы [ 2 ]

10 голосов
/ 26 января 2011

Я думаю, что link_to помещает аргументы в строку запроса при ее создании с помощью ссылки html, даже если вы добавили: method =>: post, если js отключен.

Вы можете одновременно с сообщением javascript: onclik event.

aniway, используйте link_to с методом: post - вообще плохая идея. в рельсах вы можете использовать button_to помощник для этой заливки и стилизовать его как ссылку.

редактирование:
В Rails3 документ кажется, что link_to должен имитировать то же поведение button_to при вызове с params: method =>: post

(динамически создавать форму HTML и немедленно отправьте форму).

но это не так для меня в Rails 3.0.3, даже если включен JavaScript. Я буду расследовать.

в любом случае вы должны использовать кнопки и формы для всего, что не является GET; гиперссылки намеренно не допускают использования методов, отличных от GET

edit2: в порядке, rails3 не создает встроенную форму для имитации отправки запроса по ссылке. в Rails3 к метке добавлен атрибут data-method = post для манипулирования им с помощью функции javascript. таким образом, запрос будет постепенно ухудшаться при вызове get, если js отключен.

5 голосов
/ 11 марта 2013

Это поздний ответ, но это решение этой проблемы (по крайней мере, оно работает для меня):

<%= link_to "Add Friend", {:controller => :friendships, :action => :create, :friend_id => user_id }, :method => :post %>     

Я знаю, что ваша проблема давно назрела, но это может кому-то помочь:)

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