用户之间的消息
我有正文:文本内容: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