【发布时间】:2014-07-22 19:30:21
【问题描述】:
我正在尝试为Users 和Messages 的系统建模。 Messages 有 addressers 和 addressees。 Users 有sent_messages 和received_messages。
现在测试失败了,因为它似乎无法找到 addressee_id 和 addresser_id。我想知道我是否正确地对此进行了建模,以及我应该如何通过用户创建消息。
编辑:测试的输出
ActiveRecord::UnknownAttributeError:unknown attribute: addressee_id
在消息规范的 before 语句中弹出。
用户模型
class User < ActiveRecord::Base
has_many :sent_messages, class_name: "Message", foreign_key: "addresser_id"
has_many :received_messages, class_name: "Message", foreign_key: "addressee_id"
消息模型
class Message < ActiveRecord::Base
validates :addresser_id, presence: true
validates :addressee_id, presence: true
belongs_to :addresser, class_name: "User", foreign_key: "addresser_id"
belongs_to :addressee, class_name: "User", foreign_key: "addressee_id"
end
迁移
class CreateMessages < ActiveRecord::Migration
def change
create_table :messages do |t|
t.string :content
t.integer :addresser_id
t.integer :addressee_id
t.timestamps
end
add_index :messages, [:addressee_id, :addresser_id, :created_at]
end
end
架构
create_table "messages", force: true do |t|
t.string "content"
t.integer "addresser"
t.integer "addressee"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "messages", ["addressee", "addresser", "created_at"], name: "index_messages_on_addressee_and_addresser_and_created_at"
message_spec
require 'spec_helper'
describe Message do
let(:user1) { FactoryGirl.create(:user) }
let(:user2) { FactoryGirl.create(:user) }
before { @message = user1.sent_messages.build(content: "Lorem ipsum", addressee_id: user2.id) }
subject { @message }
it { should respond_to(:content) }
it { should respond_to(:addresser_id) }
it { should respond_to(:addressee_id) }
its(:addresser) { should eq user1 }
it { should be_valid }
describe "when addresser is not present" do
before { @message.addresser = nil }
it { should_not be_valid }
end
describe "when addressee is not present" do
before { @message.addressee = nil }
it { should_not be_valid }
end
end
【问题讨论】:
-
“测试失败”是什么意思? “似乎找不到 addressee_id 和 addresser_id”是什么意思?不要只给出表格,给出其余的代码,输入和输出。 PS FK 不属于用户。
-
我将输出添加到问题中。至于输入,我想不出还有什么要包括的。我也认为 User 中会有 FK 很奇怪,但根据 spacevatican.org/2008/5/6/… 这就是解决方案。 @philipxy
-
添加的信息有帮助。例如,它必须与表声明一致。 (见答案。)另外:如果它已经编译并运行,输入和输出数据。您没有解释“失败”和“找不到”或给出错误消息,所以我们不知道“失败”时正在做什么。 (介于编译和运行之间。)包含与 minimal 示例相关的所有内容。 How do I ask a good question?.
-
知道了,谢谢你的提示。
标签: ruby-on-rails foreign-keys rails-activerecord has-many belongs-to