Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 用户之间的消息_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 用户之间的消息

Ruby on rails 用户之间的消息,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在消息表中有body:text content:text sender\u id:integer receiver\u id:integer 我在用户模型中有这样的功能: has_many :sent_messages, :class_name => "Message", :foreign_key => "sender_id" has_many :received_messages, :class_name => "Message", :foreign_key =

我在消息表中有body:text content:text sender\u id:integer receiver\u id:integer

我在用户模型中有这样的功能:

   has_many :sent_messages, :class_name => "Message", :foreign_key => "sender_id"
   has_many :received_messages, :class_name => "Message", :foreign_key => "receiver_id"
我在消息模型中有这样一个功能:

   belongs_to :sender, :class_name=>"User", :foreign_key=>"sender_id"
   belongs_to :receiver, :class_name=>"User", :foreign_key=>"receiver_id"
在您查看其他用户的配置文件时登录后,我指的是用户视图中的此链接

我这样称呼新消息:

  <%= link_to "Send a Message",{:controller=>"messages",:action=>"new"}%>
我在views\messages\new.html.erb中也有这些代码

 <% form_for @message do |f| %>
 <%= f.error_messages %>
  <p>
 <%= f.label :body %><br />
 <%= f.text_field :body %>
  </p>
  <p>
 <%= f.label :content %><br />
 <%= f.text_area :content %>
  </p>
 <p><%= f.submit "Submit" %></p>
  <% end %>
单击链接后,我填写正文和文本,然后提交。所有内容都已保存,但接收方id值为空。我尝试了很多事情,但我无法保存接收者id

例如:我这样设置链接:

  <%= link_to "Send a Message",{:controller=>"messages",:action=>"new",
   :receiver_id=>@user.id}%>

它发送我想要的用户id,我可以通过参数获取该值,但问题是我无法找到一种方法在保存其他值的同时将该值保存到数据库。

在参数中传递接收方id只会让新方法访问该值。您需要在新方法中的某个位置访问和存储参数[:receiver_id]。

Lol我发现我调用了前面提到的新消息

 <%= link_to "Send a Message",{:controller=>"messages",:action=>"new",
 :receiver_id=>@user}%>
最简单的一点是,实际上这对我来说是个大问题:在views/messages/new.html.erb中,将这一行添加到

 <%= f.hidden_field :receiver_id  %>
试一试

我个人喜欢在url中使用嵌套路由,就像这样

域/用户/123/消息/新

那你就可以了

link_to "Send a message", new_user_message( @user )
所以你的控制者会说

class MessagesController
   def new
     @message = current_user.sent_messages.build :receiver_id => params[:user_id]
   end    
end
class MessagesController
   def new
     @message = current_user.sent_messages.build :receiver_id => params[:receiver_id]
   end    
end
link_to "Send a message", new_user_message( @user )
class MessagesController
   def new
     @message = current_user.sent_messages.build :receiver_id => params[:user_id]
   end    
end