Rails: как передать параметры из формы методу?

программирование ruby on rails

Есть форма, которая вызывает метод destroy. Нужно этому методу передать значение id страницы пользователя, на странице которого была вызвана форма. Через params[:id] в метод уходит id текущего пользователя, совершающего действия над формой, а не пользователя, на странице которого эта форма вызывается.

Примечание:
Код сейчас страшен, как атомная война... Это я destroy переделывал под свои нужды:

def destroy
@user = Relationship.find(params[:id]).allowed
if !current_user.relationships.find_by_allowed_id(@user.id).nil?
current_user.relationships.find_by_allowed_id(@user.id).update_attributes(:freeze => true)
end
if [email protected]_by_allowed_id(current_user.id).nil?
@user.relationships.find_by_allowed_id(current_user.id).update_attributes(:freeze => true)
end
respond_with @user
if newbie?(current_user) && helper?(@user)
UserMailer.do_not_accept_your_help(current_user, @user).deliver
elsif helper?(current_user) && newbie?(@user)
UserMailer.do_not_agree_to_help_you(current_user, @user).deliver
end
end

Код формы, вызывающей destroy:

<%= form_for current_user.relationships.find_by_allowed_id(@user),
:html => { :method => :delete, params[:id] => @user.id },
:remote => false do |f| %>
<div class="actions">
<% if newbie?(current_user) && helper?(@user) %>
<%= f.submit "Отказаться\nот помощи", :class => 'cancel round', :confirm => 'Вы уверены, что хотите отказаться от помощи данного пользователя?' %>
<% elsif helper?(current_user) && newbie?(@user) %>
<%= f.submit "Отказать\nв помощи", :class => 'cancel round', :confirm => 'Вы уверены, что хотите отказать данному пользователю в помощи?' %>
<% end %>
</div>
<% end %>

Выдается эта форма вот в каком случае:

<% unless current_user?(@user) %>
<div class="follow_form">
<% if current_user.allowing?(@user) && !frozen_for_by?(current_user, @user) && !frozen_for_by?(@user, current_user) %>
<%= render 'disallow' %>
<% elsif !current_user.allowing?(@user) && !frozen_for_by?(current_user, @user) && !frozen_for_by?(@user, current_user) %>
<%= render 'allow' %>
<% end %>
</div>
<% end %>

Вот после рендеринга allow-формы нужно вставить еще рендеринг refuse-формы (для отказа, т.е. действовать должна как и disallow), при условии, что пользователю предложили помощь или попросили о помощи:

<%= form_for @user.relationships.find_by_allowed_id(current_user),
:html => { :method => :delete },
:remote => false do |f| %>
<div class="actions">
<% if newbie?(current_user) && helper?(@user) %>
<%= f.submit "Отказаться\nот помощи", :class => 'cancel round', :confirm => 'Вы уверены, что хотите отказаться от помощи данного пользователя?' %>
<% elsif helper?(current_user) && newbie?(@user) %>
<%= f.submit "Отказать\nв помощи", :class => 'cancel round', :confirm => 'Вы уверены, что хотите отказать данному пользователю в помощи?' %>
<% end %>
</div>
<% end %>

Знаю, код ужасен. Но я сначала хочу, чтобы это работало, а потом уже занимаюсь рефакторингом.
Ответы:
а в коде что написано?
доп:
1. params[:id] не относится к html
2. у вас 1 параметр передается, зачем вообще форма? у вас вся форма состоит из кнопки submit
не лучше ли будет
link_to_remote relationship_path(user.id), :update => :follow_form, :method => :delete
или просто link_to relationship_path(user.id), :method => :delete если вам не нравится :remote
3. посмотрите какой код сгенерировали рельсы, там генерируется не правильный params[:id] еще до того как вы его передаете контроллеру
я бы нарисовал hidden_field


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.