用户之间的消息

时间:2009-05-24 17:41:09

标签: ruby-on-rails ruby

我有正文:文本内容: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"

在您查看其他用户的个人资料时进行记录(我的意思是用户视图中的此链接)。

我这样称呼新消息:

  <%= link_to "Send a Message",{:controller=>"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

中有这些代码
 <% 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 %>

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

例如:我设置了这样的链接:

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

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

3 个答案:

答案 0 :(得分:0)

在参数中传递receiver_id只会让new方法访问它。您需要在params[:receiver_id]方法中的某个位置访问和存储new

答案 1 :(得分:0)

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

 <%= 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  %>

答案 2 :(得分:0)

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

我个人喜欢在网址中使用嵌套路由,如此

域/用户/ 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