Ruby on rails 以1控制器方法(rails)在db中保存2项
我一次在db中保存2个项目时遇到问题(我使用的是rails 3.1)。我有一个模型消息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
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