Отправка формы Rails jQuery, выполнение неправильной формы

Я разбиваю список пользователей и добавляю кнопку «Подписаться» рядом с их аватаром. Я использую jQuery как средство отправки формы «Follow».

Я столкнулся с ошибкой, из-за которой независимо от того, какая ссылка «Follow» была нажата, следует «верхний» пользователь в списке разбиения на страницы, а не предполагаемый пользователь.

Я подозреваю, что эта ошибка может быть связана с формами, которые разбиты на страницы с общим атрибутом, возможно, связанным с CSS.

Вот следующая форма:

<%= form_for(current_user.relationships.build(:followed_id => user.id), :remote => true)  do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= link_to "Follow", "#", :onclick=>"$('.new_relationship').submit()" %>

Вот действие «создать» контроллера отношений:

def create
  @user = User.find(params[:relationship][:followed_id])
  current_user.follow!(@user)
    respond_to do |format|
      format.html { redirect_to :back }
      format.js { }
    end
end

Любая помощь будет высоко оценена, спасибо!


person Andy Sharkey    schedule 07.05.2011    source источник


Ответы (1)


Вы можете использовать помощник button_to для этого. Вам не нужно будет иметь дело с формами и js напрямую. Ну и получаешь ненавязчивый js бесплатно.

<%= button_to "Follow", :remote => true, :action => "create", :id_to_follow => user.id %>

если вы не хотите использовать кнопку, используйте link_to ..., :method => :post

person Tadas T    schedule 07.05.2011
comment
На самом деле я специально не использую button_to для аскетических/дизайнерских целей. Вы уверены, что link_to :method=›:post работает? Ознакомьтесь с этой статьей о стеке: stackoverflow.com/questions/4964599/ - person Andy Sharkey; 08.05.2011
comment
Что ж, цель ссылки в HTML — сделать запрос на получение, поэтому :method =› :post кажется чем-то вроде взлома против нее, с другой стороны, ваш подход с onclick в этих условиях еще хуже. link_to работает, просто попробуйте. И убедитесь, что маршруты и действия в вашем контроллере настроены правильно, чтобы принимать переданные параметры и методы. - person Tadas T; 08.05.2011
comment
Я ценю ваш ответ, но я думаю, что может быть неправильное понимание характера проблемы. Код работает для всего сайта, за исключением случаев, когда он применяется в контексте разбиения на страницы. Onclick - правильный подход, так как я хочу использовать jQuery/CSS и переключающееся изображение в качестве кнопки. - person Andy Sharkey; 12.05.2011
comment
Проблема в том, что вы используете селектор класса jQuery. Я предполагаю, что все формы имеют один и тот же класс css, поэтому отправляется только верхняя. Во-вторых, onclick не считается хорошим подходом, лучше привязать событие click к элементу dom из вашего js-файла. Я по-прежнему предлагаю вам использовать мой подход и добавлять любую анимацию js и стили css из файлов js и css с помощью селекторов. Если вы хотите использовать свой подход, вам нужно либо назначить уникальный идентификатор css для каждой формы, чтобы вы могли найти правильную форму из вашего события onclick, либо вы должны использовать относительный путь в своем селекторе, например, родитель (форма) или что-л. - person Tadas T; 12.05.2011