如何通过Rails中的表单传递不属于模型的值?

时间:2011-03-23 02:42:27

标签: ruby-on-rails forms models

我有一个用于创建模型消息的新记录的表单。

但是,创建它的路线已经自定义为:

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

我想从新操作然后传递值:sender_id和:receiver_id所以我可以将它分配给相关的模型,称为UserHasMessages。

每当创建Message的新记录时,都需要创建此模型。

但是我不能使用隐藏字段,因为:sender_id不是Message的属性。它是UserHasMessages的一个属性。

感谢。

控制器/ 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

视图/消息/ _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 /新

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

2 个答案:

答案 0 :(得分:1)

我不确定我理解你的问题......让我们按照目前的理解来尝试:)

我相信您在表单字段中输入的任何参数都可以在控制器的params哈希中访问。例如,如果您放置一个名为“test_field”的表单字段,那么在您的控制器中,您将能够通过params [:test_field]读取它的值。

在你的控制器中,我建议你在测试时加上这样的一行: 把params.inspect

希望有所帮助! 皮尔。

答案 1 :(得分:1)

在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]

访问这些内容