- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
部署我的应用程序时,我的评论有问题。在本地一切正常。来自 heroku 的日志说:
ActiveModel::MissingAttributeError (can't write unknown attribute `user_id`):
2018-01-02T15:52:43.461794+00:00 app[web.1]: [79cd7190-e2d9-4dd0-bf71-
709552e5c6e5] app/controllers/comments_controller.rb:15:in `create'
class CommentsController < ApplicationController
def create
@post =Post.find(params[:post_id])
@comment =@post.comments.create(params[:comment].permit(:name, :body).merge(user: current_user))
redirect_to post_path(@post)
end
def destroy
@post = Post.find(params[:post_id])
@comment= @post.comments.find(params[:id])
if current_user.id == @comment.user_id
@comment.destroy
end
redirect_to post_path(@post)
end
end
class User < ApplicationRecord
has_many :posts
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
class Post < ApplicationRecord
belongs_to :user, optional: true
has_many :comments, dependent: :destroy
validates :title, presence: true, length: {minimum: 5}
validates :body, presence: true
end
class Comment < ApplicationRecord
belongs_to :post
belongs_to :user
end
class CreateComments < ActiveRecord::Migration[5.1]
def change
create_table :comments do |t|
t.string :name
t.text :body
t.references :post, index: true
t.timestamps
end
end
end
SQLite3::SQLException: duplicate column name: user_id: ALTER TABLE "comments" ADD "user_id" integer
错误
`create_table "comments", force: :cascade do |t|
t.string "name"
t.text "body"
t.integer "post_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
t.index ["post_id"], name: "index_comments_on_post_id"
end
create_table "posts", force: :cascade do |t|
t.string "title"
t.text "body"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.string "theme"
t.integer "user_id"
end
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end
最佳答案
您需要添加 user_id
列到您的 comments
table 。 belongs_to
需要这个。您还需要一个 post_id
列和 user_id
为您 posts
表到。
您可以自定义列名,但约定是使用格式 parent_table_id
.
这是关键引述,来自 docs :
Associations are implemented using macro-style calls, so that you can declaratively add features to your models. For example, by declaring that one model belongs_to another, you instruct Rails to maintain Primary Key-Foreign Key information between instances of the two models, and you also get a number of utility methods added to your model.
1
,他们所有的评论和帖子都会有
user_id
1
的值,它实际将记录捆绑在一起。
def change
create_table :comments do |t|
...
t.belongs_to :user, index: true
...
end
end
关于ruby-on-rails - ActiveModel::MissingAttributeError(无法写入未知属性 `user_id`),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48064675/
在我的 Rails 3.2.11 和“开发”环境中,当我尝试使用事件模型时: class DisponibilityApi include ActiveModel::Model attr_ac
尝试将 Rails 6.0.0 与 Mongoid 6.1.0 结合使用 gem 'rails', '~> 6.0.0' gem 'mongoid', '~> 6.1.0' 已经尝试不在 Gemfil
我的 Controller 中有一个客户端模型和一个方法,应该返回最近的客户端。我正在使用 ActiveModel::Serializers 但它不起作用。 class ClientSerialize
使用 Rails 3 和 ActiveModel,我无法使用 self.用于获取基于 ActiveModel 的对象中属性值的语法。 在下面的代码中,在 save 方法中,self.first_nam
我正在做一个类似 DataMapper 的小型 ODM 项目,我正在尝试使用 ActiveModel::Validations 组件。然而,我在编写测试时遇到了一个问题——我使用匿名类来构建我的测试模
是否可以在运行时决定哪种类型在 ActiveModel::Attributes 中转换属性?我有以下代码 class DynamicType (my_model) { if my_model.
我在没有数据库后端的 Rails 3.1.1 项目中使用 ActiveModels。 我想知道如何将属性的类型设置为 String、Boolean、Decimal。 据我了解,当使用由数据库支持的 A
我一直在遵循关于创建和安装引擎的 rails 指南 here .创建博客文章,当我尝试发表评论时,它返回“ActiveModel::ForbiddenAttributesError in Blorgh
说我有这个序列化程序 class FooSerializer < ActiveModel::Serializer attributes :this, :that, :the_oth
这是我的问题的后续: Updating child association in ActiveModel 我正在寻找标准/正确的方法来更新与 parent 关联的许多子记录。 假设我有一个父表(使用
我有一个ActiveModel类,其实例仅在被触摸时才有效。以下代码有效: class Base include ActiveModel::Model validates :touched?,
我有一个ActiveModel类,其实例仅在被触摸时才有效。以下代码有效: class Base include ActiveModel::Model validates :touched?,
我有一个像这样使用的 httparty“模型” myRest = RestModel.new myRest.someGetResquest() myRest.somePostRequest() 我将如
我正在使用 Active Model Serializers v0.10.0.rc4 我想生成如下所示的 json: { "posts": [ { "post": {"id": 2, "n
如何获得 ActiveRecord 属性方法功能?我有这个类: class PurchaseForm include ActiveModel::Validations include Acti
我想实现的是获取验证失败的类型。它是空白的吗?复制 ?长度 ? class Film true, :uniqueness => true, :length => { :maximum => 100
我正在使用设计来注册我的用户。我正在自定义注册 Controller 的创建操作,但是每当我尝试创建任何新用户时,它都会被拒绝,并且出现上述错误。我知道我必须允许所需的参数,而且我这样做了,所以我不明
我有 2 个模型,它们都在“Loot”下命名 战利品::截图收藏 belongs_to :agent has_many :screenshots, class_name: 'Loot::Screens
从 Controller 使用序列化程序时,我可以像这样向它传递额外的选项 render json: user, some_option: 'foobar 那我可以引用some_option在序列化程
我有一种情况,其中用户将一些数据提交到将在后台处理的 Web 服务器(Rails): POST /fibonacci/6012 HTTP/1.1 Host: example.com 服务器响应一个指向
我是一名优秀的程序员,十分优秀!