如何在Rails中添加与现有对象的关系

时间:2019-01-07 12:20:10

标签: ruby-on-rails

我想在现有帖子和作者之间添加关系。

我试图修改created_by属性,但无法从对象访问它。

def set_author
    if (@post.created_by.empty? && @post.author_code.present?)
      if @post.author_code == params[:author_code]
        @post.created_by = current_user
      else
        raise(ExceptionHandler::InvalidAuthorCode, Message.invalid_author_code)
      end
    else
      raise(ExceptionHandler::DisallowedAction, Message.action_not_allowed)
  end
end

它不起作用,因为即使存在数据库,也没有方法@post.created_by。 从schema.rb发布模型

create_table "posts", force: :cascade do |t|
  t.string "title"  
  t.text "content"
  t.boolean "accepted", default: false
  t.string "created_by"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.string "author_code"
end

编辑: post.rb的一部分

  belongs_to :user, optional: true, foreign_key: :created_by

user.rb的一部分

  has_many :confessions, foreign_key: :created_by

2 个答案:

答案 0 :(得分:1)

假设仅@post中没有created_by OR user的失败,那么您可以使用以下命令:

@post.try(:created_by).blank? && @post.author_code.present?

答案 1 :(得分:0)

我试图以错误的方式更新@post属性。更改

@post.created_by = current_user

@post.update_attribute(:created_by, current_user)

,它正在工作。 这不是一个Devise用户模型,只是自己编写的。