ruby-on-rails - Active Record 如何添加记录到 has_many :through association in rails

标签 ruby-on-rails ruby activerecord has-many-through

我的 has_many :through 关联有很大的问题。 模型看起来像这样:

class User < ActiveRecord::Base
  has_many :roles
  has_many :datasets, through: :roles
  has_secure_password
end

class Role < ActiveRecord::Base
  belongs_to :user
  belongs_to :dataset
end

class Dataset < ActiveRecord::Base
  has_many :roles
  has_many :users, through: :roles
end

我想在每次创建新数据集时向角色添加一条记录。它应该 使用新数据集创建现有用户“Admin”,角色列名称应设置为“Admin”。

我尝试了在 Stackoverflow 上找到的所有内容,但没有任何效果。

我在 DatasetController 中的创建方法如下所示:

def create
    @dataset = Dataset.new(dataset_params)
    @dataset.save
    @user = User.find_by(name: 'Admin')
    @dataset.users << @user
    #@dataset.roles.create(user: @user, dataset: @dataset, name: 'Admin')    
    respond_with(@dataset)
  end

<< 我都试过了运算符和 create方法。

第一个结果是:

ActiveRecord::UnknownAttributeError in DatasetsController#create
unknown attribute: dataset_id

第二个:

ActiveModel::MissingAttributeError in DatasetsController#create
can't write unknown attribute `user_id

有谁知道我为什么会收到这些错误?

我的 schema.rb:

create_table "datasets", force: true do |t|
  t.string   "name"
  t.text     "description"
  t.datetime "created_at"
  t.datetime "updated_at"
end

create_table "roles", force: true do |t|
  t.string   "name"
  t.datetime "created_at"
  t.datetime "updated_at"
end

create_table "users", force: true do |t|
  t.string   "name"
  t.string   "mail"
  t.string   "password_digest"
  t.datetime "created_at"
  t.datetime "updated_at"
end

最佳答案

您的Role 模型需要列来引用它所属的UserDataset。没有这些,它就不知道谁属于谁。

因此您只需要创建一个迁移来添加这些列:

class AddRefererColumnsToRole < ActiveRecord::Migration
  def change
    add_column :roles, :user_id, :integer
    add_column :roles, :dataset_id, :integer
  end
end

关于ruby-on-rails - Active Record 如何添加记录到 has_many :through association in rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27422310/

相关文章:

ruby-on-rails - 不妨碍访问者的 Rails 应用维护

ruby-on-rails - Rails嵌套资源: Input vs.输出格式不一致

ruby-on-rails - 为什么在 Heroku 上,如果我点击 "About your application’ s environment”,它会说找不到页面?

ruby-on-rails - 事件记录范围的可互换性和顺序

mysql - 列的排序依据和限制

mysql - 如何使用 activerecord 在 JOIN 中指定 'USE INDEX'

ruby-on-rails - 在 Rails 中实现 gmail 样式 "undo"的最佳方法是什么?

ruby-on-rails - Rails 3 事件管理员。如何为关联记录设置默认排序顺序?

ruby - OSX/Linux 上的 Monit + RVM + Thin

ruby - Ruby 中的 i.to_s 是什么意思?