Как передать параметр в hidden_field_tag ​​в моей форме в Rails 3? - PullRequest
4 голосов
/ 04 марта 2012

Я пытаюсь заставить работать функцию обмена сообщениями (используя акт-как-сообщение-100 * * гем), и я хочу, чтобы пользователь отправлял сообщение, не вводя поле «:».

В моем /users/show.html.erb у меня есть:

<%= link_to 'Send a message', new_message_path %>

И в моем /messages/new.html.erb:

<%= simple_form_for @message, :url => messages_path, :method => :post do |f| %>
   <%= hidden_field_tag :user_id %> 
   <%= f.input :body %>
   <%= f.submit %>
 <% end %>

И мой контроллер сообщений:

def new
  @message = ActsAsMessageAble::Message.new
 end

 def create
   @to = User.find(params[:user_id])
   current_user.send_message(@to, params[:body])
 end

В тот момент, когда я отправляю форму, Rails, очевидно, не может найти пользователя с id = ничем , поскольку в нем нет param [: user_id].

Я не могу понять, как передать параметр в этот hidden_field_tag ​​в форме?

Ценю вашу помощь.

Ответы [ 2 ]

3 голосов
/ 04 марта 2012

Итак, я хотел зайти в профиль пользователя, щелкнуть «Отправить сообщение» и иметь возможность написать сообщение и разрешить его автоматическую отправку пользователю без явного указания поля: to.

Проблема была в том, что: user_id в <%= hidden_tag_field :user_id %> не был установлен.Другими словами, я не мог получить: user_id из параметров, пока находился в этой форме.

Некоторые из решений, которые мы попробовали, заключались в том, чтобы включить параметры в link_to, но это не соответствовало форме, которая видела объект как ноль.

В итоге я создал вложенный ресурс, подобный так:

resources :users do
   resources :messages do
   end
 end

И это в конечном итоге дало мне URL: users /: id / messages / new (new_user_message_path)

Мой контроллер в итоге выглядел так:

def new
   @message = ActsAsMessageable::Message.new
   @user = params[:user_id]
 end

 def create
   @to = User.find params[:id]
   if current_user.send_message(@to, params[:acts_as_messageable_message][:body]
     flash[:notice] = "Success"
   else 
     flash[:error] = "Fail"
   end
 end

В том виде, в котором я смог оставить <%= hidden_tag_field :user_id %> как есть.

Но в основном это решило проблему поискапользователь (чей профиль я посещал) и установка @to в моем действии создания.

1 голос
/ 04 марта 2012

Я на своем iPhone, извините за краткий ответ, вам просто нужно ввести идентификатор пользователя в скрытое поле, вы можете найти синтаксис в ответе здесь:

рельсы - что именно делают hidden_field и hidden_field_tag?

Редактировать: только что заметил - это <% = hidden_field_tag: user_id%>

Должно быть так: <% = f.hidden_field_tag: user_id%>

Попробуйте передать параметры в метод create следующим образом:

User.find (PARAMS [: сообщение] [: user_id])

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