Rails: передача нескольких параметров в form_for url?

Это отлично работает:

- form_for @user, :url => { :action => :create, :type => @type } do |f| ...

Возвращает /users/(id)?type=type

Но в другом представлении мне нужно передать TWO-параметры в строку URL, и это не сработает:

- form_for @user, :url => { :action => :update, :type => @type, :this => @currently_editing } do |f| ...

Возвращает /users/(id)?this=currently_editing

Я также пробовал:

- form_for @user, :url => { :action => :update, :params = params.merge({:this => @currently_editing, :type = @type})} do |f| ...

... без везения (ошибка: разрешены только запросы GET).

Я хочу, чтобы он возвращал это: /users/(id)?this=currently_editing&type=type

Мысли?

Ответ 1

Зачем вам передавать их в строку URL? Почему бы просто не добавить их как скрытые поля в форме? Почти во всех случаях вы должны передавать переменные таким образом с помощью POST.

Ответ 2

Я бы использовал скрытые поля, но это должно работать:

<% form_for @user, :url => user_path(@user.id, :type => @type, :this => @currently_editing), :method => :put do |f| -%>

:method => :put запускает действие обновления при использовании маршрутов RESTful.

Ответ 3

попробуйте это

вы можете передать более одного параметра таким образом.

- form_for @user, :url => xxx_yyy_path(:param1 => value1, :params2 => value2, ......) do |f| ...

Ответ 4

Я думаю, вам нужно переместить нужные атрибуты запроса за пределами параметра: url, например:

form_for @user, :url => { :action => :update }, :type => @type, :this => @currently_editing do |f|