Как передать значения, которые не являются частью модели, через форму в Rails? - PullRequest
2 голосов
/ 23 марта 2011

У меня есть форма, используемая для создания новой записи модели сообщения.

Однако маршрут для ее создания был настроен так:

  match 'messages/:sender_id/to/:receiver_id' => "messages#new", :as => :send_message

Я хочу изновое действие для передачи значений для: sender_id и: receiver_id, чтобы я мог назначить его для связанной модели, называемой UserHasMessages.

Эту модель необходимо создавать всякий раз, когда создается новая записьfor Message создан.

Но я не могу использовать скрытые поля, потому что: sender_id НЕ является атрибутом Message.это атрибут UserHasMessages.

Спасибо.

controller / messages_controller.rb

 def create
 15     @message = Message.new(params[:message])
 16     if @message.save
 17       @user_has_message = UserHasMessages.new
 18       @user_has_message.user_id = params[:sender_id]
 19       @user_has_message.message_id = @message.id
 20       @user_has_message.is_sender = 1
 21       @user_has_message.save
 22       
 23       @user_has_message = UserHasMessages.new
 24       @user_has_message.user_id = params[:receiver_id]
 25       @user_has_message.message_id = @message.id
 26       @user_has_message.is_sender = 0
 27       @user_has_message.save

view / messages / _form.

<%= form_for @message do |f| %>
  2   <%= f.error_messages %>
  3   <p>
  4     <%= f.label :subject %><br />
  5     <%= f.text_field :subject %>
  6   </p>
  7   <p>
  8     <%= f.label :body %><br />
  9     <%= f.text_area :body %>
 10   </p>
 11   <p>
 12     <%= f.label :contact_id %><br />
 13     <%= f.text_field :contact_id %>
 14   </p>
 15   <p>
 16     <%= f.label :company_id %><br />
 17     <%= f.text_field :company_id %>
 18   </p>
 19   <p> 
 20       
 21     <%= hidden_field_tag :sender_id, :value => params[:sender_id] %>
 22     <%= hidden_field_tag :receiver_id, :value => params[:receiver_id] %>
 23   </p>
 24       
 25   <p><%= f.submit %></p>
 26 <% end %>

message_controller / new

10   def new
 11     @message = Message.new
 12   end

Ответы [ 2 ]

1 голос
/ 23 марта 2011

В form_for можно передавать отдельные значения, не относящиеся к объекту модели, как это

form_for :message do |f|
  f.text_field ..
  ...
  hidden_field_tag :sender_id, params[:sender_id]
  hidden_field_tag :receiver_id, params[:receiver_id]
end

Доступ к ним можно получить методом create как params[:sender_id] и params[:receiver_id]

.
1 голос
/ 23 марта 2011

Я не уверен, что понимаю ваш вопрос ... Давайте попробуем в соответствии с тем, что я понимаю до сих пор:)

Я верю, что любой параметр, который вы введете в поле формы, будет доступен в хэше paramsваш контроллер.Например, если вы поместите поле формы с именем 'test_field', то в вашем контроллере вы сможете прочитать его значение через params [: test_field].

В вашем контроллере я рекомендую вам поставить строкувот так во время тестирования: ставит params.inspect

Надеюсь, это поможет!Пьер.

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