Ruby on rails 如何传递非';t通过Rails中的表单作为模型的一部分?

Ruby on rails 如何传递非';t通过Rails中的表单作为模型的一部分?,ruby-on-rails,forms,models,Ruby On Rails,Forms,Models,我有一个表单用于创建模型消息的新记录 但是,创建此路径的路径已定制为如下所示: match 'messages/:sender_id/to/:receiver_id' => "messages#new", :as => :send_message 我希望从新操作中传递:sender\u id和:receiver\u id的值,以便将其分配给一个相关的模型,称为UserHasMessages 每当创建消息的新记录时,都需要创建此模型 但我不能使用隐藏字段,因为:sender\u

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

但是,创建此路径的路径已定制为如下所示:

  match 'messages/:sender_id/to/:receiver_id' => "messages#new", :as => :send_message
我希望从新操作中传递:sender\u id和:receiver\u id的值,以便将其分配给一个相关的模型,称为UserHasMessages

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

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

谢谢

控制器/消息\u 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_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 %>

我不确定我是否理解你的问题。。。让我们根据我目前了解的情况来尝试:)

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

在您的控制器中,我建议您在测试时放一行如下所示: 检查

希望有帮助!
Pierre。

以_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\u id]
params[:receiver\u id]

访问。此外,您可能需要重新考虑您的路线,这在我看来似乎不符合逻辑。与/messages/:sender\u id/to/:receiver\u id不同,您可能希望执行如下操作:/users/:user\u id/messages\u to\u user/:receiver\u id是的,我可以更改格式,但如何将其从新控制器传递到创建控制器……看起来参数[:sender\u id]无法通过创建…我不理解您的建模。你能更具体一点吗(如果可以的话,请提供一些代码)?你的意思是“我如何将它从新建传递到创建操作?”还是你有其他我不明白的想法?是的,创建操作…如果下面的注释不起作用,我会添加一些代码谢谢…啊,也许这就是我做错的,我使用了隐藏字段…我应该使用隐藏字段标记…让我试试看,感谢you@rubyprince--嗨,它传递了一个0的值,我把我的代码、控制器、表单和路由放进去了……我遗漏了什么?谢谢对于隐藏字段标记,只需将
参数[:sender\u id]
作为第二个参数。不要给
value=>
@angela..你也可以在controller中粘贴你的
new
函数。@angela..你也可以按预期获得
new
的url。
messages/11/to/14
其中
11
14
发送方id
接收方id
。那么这就行了。。
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