ActiveModel :: UnknownAttributeError:播种belongs_to关系时的未知属性

时间:2018-01-19 04:20:39

标签: ruby-on-rails activerecord ruby-on-rails-5

尝试播种has_many / belongs_to关系。 用户has_many脚本,脚本属于用户。

播种脚本时,我收到此错误:

  

ActiveModel :: UnknownAttributeError:未知属性' user_id'对于   脚本。

我认为迁移中的这一行会为脚本创建user_id属性吗?

t.belongs_to :user, index: true, foreign_key: true

应用程序/模型/ script.rb

class Script < ApplicationRecord
  belongs_to :user
  has_many :commits
  has_many :script_users, through: :commits, source: :user
end

应用程序/模型/ user.rb

class User < ActiveRecord::Base
  has_many :scripts
  has_many :used_scripts, through: :commits, source: :script
  has_many :commits
end

分贝/迁移/ 20171231022826_create_scripts.rb

class CreateScripts < ActiveRecord::Migration[5.1]
  def change
    create_table :scripts do |t|
      t.string :name
      t.string :skill
      t.string :bot_for
      t.string :game_for

      t.belongs_to :user, index: true, foreign_key: true

      t.timestamps
    end
  end
end

分贝/ seeds.rb

admin = User.create!(
  email: 'a@a.com',
  password: 'adminadmin',
  password_confirmation: 'adminadmin'
)

script = Script.create!(
  name: 'YWoodcutter',
  skill: 'Woodcutting',
  bot_for: 'Android',
  game_for: "CandyLand,
  user_id: admin.id
)
  

ActiveModel :: UnknownAttributeError:未知属性&#39; user_id&#39;对于   脚本。   我已确保rake:db reset并仍然出错。

谢谢

更新

我做了一些事情,现在工作正常。我认为问题可能是我的脚本迁移后创建了用户迁移。用户迁移应该在脚本之前完成,因此我更改了日期以更改它们迁移的顺序。是否有rake rake db:rollback&amp; db:重置也是好的措施。

2 个答案:

答案 0 :(得分:1)

userBasicInformationbelongs_to的别名,它应与reference

相同

如果它不起作用,请尝试使用以下解决方案

references

答案 1 :(得分:0)

使用以下行创建模型

mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

            @Override
            public void onMapClick(final LatLng point) {
                if (PolyUtil.isLocationOnPath(point, finalPolylines.getPoints(), true)) {
                    // user clicked on polyline

                    Toast.makeText(getContext(), "found", Toast.LENGTH_SHORT).show();
                    Log.d("found", "onMapClick:  found");
                }
            }
        });

默认情况下,它会在迁移文件中的行下面

while (*(arg_to++) = *(arg_from++));

并在脚本模型中添加rails g model script references:user 。导轨5中的t.references :user, foreign_key: true 可能不是belongs_to :user