我有一个问题,一次在db中保存2个项目(我正在使用rails 3.1)。我有模型消息
class Message < ActiveRecord::Base
belongs_to :user
validates_presence_of :content
end
消息模型有params:user_id(接收者),user_from(发送者)和内容(文本)
和模型用户
class User < ActiveRecord::Base
has_many :posts
has_many :messages
end
在MessagesController中我有方法
def create
@message =Message.new(params[:message])
User.find(@message.user_id).messages.build(params[:message])
User.find(@message.user_from).messages.build(params[:message])
end
问题是User.find(@ message.user_id)只有这条消息,user_from没有。我甚至尝试了这个User.find(2).messages.build(params[:message])
而不是User.find(@message.user_from).messages.build(params[:message])
而id为2的用户也没有这个消息,只有user_id的用户有。我做错了什么?
提前致谢
答案 0 :(得分:2)
使用create
而不是build
。
build
。在您的情况下,正在创建消息实例但未保存。
答案 1 :(得分:1)
您的邮件模型应与邮件的发件人和收件人都有关联,
class Message < ActiveRecord::Base
belongs_to :sender
belongs_to :receiver
validates_presence_of :content
end
class User < ActiveRecord::Base
has_many :posts
has_many :send_messages, :foreign_key => "message_from"
has_many :received_messages, :foreign_key => "message_id"
end
另外假设您的参数将具有message_id(消息接收者的ID),您应该在控制器中执行以下操作,
@message = current_user.send_messages.build(params[:message])
答案 2 :(得分:1)
模型设计不对。怎么样:
class Message < ActiveRecord::Base
belongs_to :sender, :class_name => "User"
belongs_to :receiver, :class_name => "User"
end
class User < ActiveRecord::Base
has_many :sent_messages, :class_name => "Message", :foreign_key => "sender_id"
has_many :received_messages, :class_name => "Message", :foreign_key => "receiver_id"
end
控制器很简单(你需要params [:message] [:sender_id]和params [:message] [:receiver_id]从表格中设置):
def create
@message = Message.create(params[:message])
...
end
但您可能不希望用户篡改发件人身份,因此:
def create
@message = current_user.sent_messages.create(params[:message])
...
end