Ruby on rails 以1控制器方法(rails)在db中保存2项

Ruby on rails 以1控制器方法(rails)在db中保存2项,ruby-on-rails,ruby,database,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby,Database,Ruby On Rails 3,Ruby On Rails 3.1,我一次在db中保存2个项目时遇到问题(我使用的是rails 3.1)。我有一个模型消息 class Message < ActiveRecord::Base belongs_to :user validates_presence_of :content end 问题是User.find(@message.User\u id)只有此消息,User\u from没有。我甚至尝试过这个User.find(2).messages.build(params[:message])而不是Use

我一次在db中保存2个项目时遇到问题(我使用的是rails 3.1)。我有一个模型消息

class Message < ActiveRecord::Base
  belongs_to :user
  validates_presence_of :content
end
问题是User.find(@message.User\u id)只有此消息,User\u from没有。我甚至尝试过这个
User.find(2).messages.build(params[:message])
而不是
User.find(@message.User\u from).messages.build(params[:message])
和id为2的用户也没有这个消息,只有id为User\u的用户才有。我做错了什么


提前感谢

使用
创建
而不是
构建


build
用于创建模型实例,但不希望立即保存。在您的情况下,消息实例正在创建但未保存。

使用
create
而不是
build


build
用于创建模型实例,但不希望立即保存。在您的情况下,消息实例正在创建但未保存。

您的消息模型应该与消息的发送者和接收者都有关联

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

您的消息模型应该与消息的发送者和接收者都有关联

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

模型设计不对。那么:

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
但您可能不希望用户篡改发件人身份,因此:

def create
  @message = current_user.sent_messages.create(params[:message])
  ...
end

模型设计不对。那么:

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
但您可能不希望用户篡改发件人身份,因此:

def create
  @message = current_user.sent_messages.create(params[:message])
  ...
end

查找并替换单词
build
,并将其替换为
create
。[删除评论后,您显然明白了这一点]。谢谢。抱歉,新手问题)我已经删除了注释,因为它在coment中是一个非常愚蠢的问题)查找并替换单词
build
,并替换为
create
。[删除评论后,您显然明白了这一点]。谢谢。抱歉,新手问题)我已经删除了评论,因为这在coment中是一个非常愚蠢的问题)
def create
  @message = current_user.sent_messages.create(params[:message])
  ...
end