- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 User
和 Message
系统建模。 Message
有addresser
和addressee
。 用户
有sent_message
和received_messages
。
目前测试失败,因为它似乎无法找到 addressee_id 和 addresser_id。我想知道我是否已正确建模,以及我应该如何通过用户创建消息。
编辑:测试的输出
ActiveRecord::UnknownAttributeError:未知属性: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"
消息规范
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
最佳答案
尝试替换这个:
describe Message do
...
before { @message = user1.sent_messages.build(content: "Lorem ipsum", addressee_id: user2.id) }
subject { @message }
...
end
有了这个:
describe Message do
...
let(:message){ user1.sent_messages.build(content: "Lorem ipsup", addressee_id: user2.id) }
subject { message }
...
end
还要检查迁移是否在测试环境中运行。
编辑:ActiveRecord::UnknownAttributeError 表示数据库中缺少一列。迁移似乎没问题,但 Message.column_names 的模式和输出却没有。
似乎您的 addressee_id/addresser_id 在数据库中实际上被命名为 addressee/addresser 。您是否在运行 db:migrate 后编辑了迁移文件?
尝试运行 rake db:migrate:redo STEP=1(如果这不是您最后一次迁移,请更改步骤)
关于ruby-on-rails - Rails has_many belongs_to with foreign_key 和 class_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24896152/
我的模型是这样的: class Post :shareable, :primary_key => :guid, :foreign_key => :shareable_guid has_many
我有一个城市模型和城市表。服务模型和服务表。一项服务有一个城市(起源城市和目的地城市)。一个城市“有很多”服务。在 services 表中,有两列关于城市:origin_city_id 和destin
我有一个名为 animals 的表,其中包含以下列: id: INT state: VARCHAR 另一个名为 houses 的表具有以下列: id: INT animal_id: INT color
这是集群表: ╭────╥────────────┬─────────────╮ │ id ║ name │ prefix │ ╞════╬════════════╪══════
我得到了以下模型: class Coaching < ActiveRecord::Base ... belongs_to :user belongs_to :coach, class_na
我们有一些从提供非整数唯一 ID 的第三方导入的数据。 在 Rails 2.2.2 中,我们可以在 has_many 与非整数列的关系上使用 :foreign_key 并且它有效。 但是我们现在升级到
如果你有 Parent has_many :children Child Child 上的外键(到 Parent)和相应的 belongs_to :parent 是否有任何原因可能不受欢迎? 什么时
我正在使用 Rails 3,我有一个简单的模型 class Post has_many :comments end 我正在做一些元编程,我需要知道注释表中的 foreign_key 的名称。 在上
我正在处理一个相当简单的 has_many through: 情况,我可以使 class_name/foreign_key 参数在一个方向上工作,但不能在另一个方向上工作。也许你能帮帮我。 (附注:我
我有以下一组模型: class Cardstock :hex, :foreign_key => :hex has_many :palette_colors, :through => :color
在合适的 sqlite 版本中,我们可以通过“PRAGMA foreign_keys = ON”强制外键约束。但是,用户无法每次建立连接时都登录数据库。所以我想知道我们如何让它在 sqlalchemy
我最近遇到了这段代码。用户有很多答案。 :class_name 和 :foreign_key 的目的是什么? class Answer 'Question", :foreign_key => 'qu
我最近遇到了这段代码。用户有很多答案。 :class_name 和 :foreign_key 的目的是什么? class Answer 'Question", :foreign_key => 'qu
是否有一个 Postgresql 数据库配置等同于 Sqlite 中的 PRAGMA foreign_keys = ON? 最佳答案 您可以测试禁用表上的所有触发器,FK 是通过 PostgreSQL
假设您为电视节目创建了一个 imdb 类型的网站。您有一个 Show,其中包含许多附加的 episodes 和一群 people 现在我通过contribution 表将people 链接到episo
我有 2 个模型与 has_one 和 has_many 关联。 realm.rb class Realm < ActiveRecord::Base has_one :realm_type,
我在一个实体中有两个外键引用另一个实体。这是它的样子 class Review(db.Model): __tablename__ = 'Review' id = db.
从文档中我读到: class Book < ApplicationRecord belongs_to :author, class_name: "Patron", foreign_key: "pa
我用 Flask-SQLalchemy 创建了 3 个模型:用户、角色、用户角色 角色.py: class Role( ActiveRecord, db.Model ): __tablenam
我创建了一个 SQL 文件,它加载到 sqlite3 中并为我创建了一堆表。在该 sql 文件中,我尝试使用 pragma 强制执行 foreign_keys: PRAGMA foreign_keys
我是一名优秀的程序员,十分优秀!