Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为发布帖子的用户迁移_Ruby On Rails - Fatal编程技术网

Ruby on rails 为发布帖子的用户迁移

Ruby on rails 为发布帖子的用户迁移,ruby-on-rails,Ruby On Rails,在我的应用程序中,我有用户和项目的模型 我希望用户能够关注许多项目。所以用户有很多项目,项目不仅属于创建它们的用户,也属于跟随它们的用户 所以我生成了一个名为ProjectRelationship的迁移,并试图让它在下面流动,但它似乎不起作用。有人能帮我修复我的联想吗 谢谢你的帮助 project_relationship.rb user.rb schema.rb projects/show.html.erb 您需要指定外键。ProjectRelationship模型期望相应的表具有用户id和项

在我的应用程序中,我有用户和项目的模型

我希望用户能够关注许多项目。所以用户有很多项目,项目不仅属于创建它们的用户,也属于跟随它们的用户

所以我生成了一个名为ProjectRelationship的迁移,并试图让它在下面流动,但它似乎不起作用。有人能帮我修复我的联想吗

谢谢你的帮助

project_relationship.rb

user.rb

schema.rb

projects/show.html.erb


您需要指定外键。ProjectRelationship模型期望相应的表具有用户id和项目id列。但是,您使用了不同的名称。因此,请指定外键:

class ProjectRelationship < ActiveRecord::Base
  belongs_to :user, foreign_key: "follower_id"
  belongs_to :project, foreign_key: "projectuser_id"
end
您还需要在其他型号中指定外键:

class Project < ActiveRecord::Base
  belongs_to :user
  has_many :project_relationships, foreign_key: "projectuser_id"
  has_many :followers, through: :project_relationships, source: :user
end

class User < ActiveRecord::Base
  has_many :projects
  has_many :project_relationships, foreign_key: "follower_id"
  has_many :projects_followed, through: :project_relationships, source: :project
end

@roma149-感谢您的回复。我更新了控制器,路线和你说的。没有生成错误,但当我单击_follow.html.erb中的follow按钮时,它似乎没有跟踪项目或更新count@project.followers.count


将详细信息移至此处:

那么,实际问题是什么?运行代码时发生了什么,它与您期望的有什么不同?我不确定关联是否正确,因为我遇到了以下错误:ActiveRecord::StatementInvalid in Projectsshow;SQLite3::SQLException:没有这样的列:project_relationships.project_id:选择COUNT*从用户内部加入用户上的project_relationships.id=project_relationships.user_id WHERE project_relationships.project_id=23是否确实为所有模型创建了迁移?您的架构看起来像是为项目关系创建了一个迁移。好的,将使用specify foreign keys方法。如果我这样做,我会在所有模型中指定外键,对吗?项目关系、项目和用户。今晚我将对此进行测试是的,您必须指定Rails无法从模型名称推断它们的位置。如果Rails看到belown_to:user,它将期望一个user_id的外键,因此您需要告诉它您使用了另一个外键。祝你好运谢谢你的帮助。请看下面我更新的问题,我会马上检查你的回答。没问题。尝试将attr_accessible:follower_id添加到您的用户模型中,这将允许您通过批量分配进行设置。但是,我不明白你为什么要做current_user.project_relationships.buildfollower_id:@project.id,也许你指的是current_user.project_relationships.buildprojectuser_id:@project.id?因为在这种情况下,您需要将attr_accessible:projectuser_id添加到您的项目模型中。谢谢。我将“attr\u accessible:projectuser\u id”添加到我的“projectrelationship model”中,因为这似乎消除了错误。我还更新了“跟随”和“取消跟随”按钮。页面加载时不会出错,但似乎不会实际更新,例如,跟踪并更改“取消跟踪”按钮。你知道为什么吗?
has_many :projects
has_many :project_relationships
has_many :projects_followed, through: :project_relationships, source: :project
create_table "project_relationships", :force => true do |t|
  t.integer  "follower_id"
  t.datetime "created_at",     :null => false
  t.datetime "updated_at",     :null => false
  t.integer  "projectuser_id"
end

add_index "project_relationships", ["follower_id"], :name => "index_project_relationships_on_follower_id", :unique => true
add_index "project_relationships", ["projectuser_id"], :name => "index_project_relationships_on_projectuser_id"
<%= @project.followers.count %>
class ProjectRelationship < ActiveRecord::Base
  belongs_to :user, foreign_key: "follower_id"
  belongs_to :project, foreign_key: "projectuser_id"
end
create_table :project_relationships do |t|
  t.integer :user_id
  t.integer :project_id
  ...
end
class Project < ActiveRecord::Base
  belongs_to :user
  has_many :project_relationships, foreign_key: "projectuser_id"
  has_many :followers, through: :project_relationships, source: :user
end

class User < ActiveRecord::Base
  has_many :projects
  has_many :project_relationships, foreign_key: "follower_id"
  has_many :projects_followed, through: :project_relationships, source: :project
end