用户之间的消息

我有正文:文本内容:text sender_id:整数receiver_id:消息表中的整数

我在用户模型中有这个:

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" 

在您查看其他用户的配置文件时进行日志记录(我的意思是用户视图中的此链接)。

我这样称呼新消息:

  "messages",:action=>"new"}%> 

我在messages_controller中有这些代码:

  def new @message = current_user.sent_messages.build end def create @message = current_user.sent_messages.build(params[:message]) if @message.save flash[:notice] = "Successfully created message." redirect_to root_url else render :action => 'new' end end #..... 

此外,我在views \ messages \ new.html.erb中有这些代码

    



点击链接后我填写正文和文字然后提交。 一切都已保存,但receiver_id值为null。 我尝试了很多事情,但我无法保存receiver_id

例如:我设置链接:

  "messages",:action=>"new", :receiver_id=>@user.id}%> 

它发送我想要的用户ID,我可以使用params获取此值,但问题是我无法找到将此值保存到数据库同时保存其他值的方法。

在params中传递receiver_id只是让new方法可以访问它。 您需要在new方法中的某处访问和存储params[:receiver_id]

大声笑我发现我打电话给我之前提到的新消息

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

那么新方法就像在消息模型中那样

  def new @message =current_user.sent_messages.build(:receiver_id=>params[:receiver_id]) end 

最简单的事情(实际上这对我来说是个大问题:))在views / messages / new.html.erb中在form_for中添加这一行

  <%= f.hidden_field :receiver_id %> 

尝试

 class MessagesController def new @message = current_user.sent_messages.build :receiver_id => params[:receiver_id] end end 

我个人喜欢在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