Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 4 Rails通过关联没有更新连接模型_Ruby On Rails 4_Activerecord_Has Many Through - Fatal编程技术网

Ruby on rails 4 Rails通过关联没有更新连接模型

Ruby on rails 4 Rails通过关联没有更新连接模型,ruby-on-rails-4,activerecord,has-many-through,Ruby On Rails 4,Activerecord,Has Many Through,我有以下型号: class Project < ActiveRecord::Base has_many :memberships has_many :users, through: :memberships end class User < ActiveRecord::Base has_many :memberships has_many :projects, through: :memberships end class Membership < Acti

我有以下型号:

class Project < ActiveRecord::Base
  has_many :memberships
  has_many :users, through: :memberships
end

class User < ActiveRecord::Base
  has_many :memberships
  has_many :projects, through: :memberships
end

class Membership < ActiveRecord::Base
  belongs_to :user
  belongs_to :project
end
在我的控制器中,我想为当前用户创建一个项目

def create
  @project = current_user.projects.build(project_params)
  if @project.save
    render json: @project, status: :ok
  else
    render json: { errors: @project.errors }, status: :unprocessable_entity
  end
end

def project_params
  params.require(:project).permit(:name)
end
调用@project.save时,日志中的SQL:

INSERT INTO "projects" ("created_at", "name", "updated_at") VALUES (?, ?, ?)  [["created_at", "2014-12-09 17:18:55.298566"], ["name", "Test"], ["updated_at", "2014-12-09 17:18:55.298566"]]
因此,成员身份永远不会更新,因此项目会生成,但不会与当前用户关联。我认为rails应该在使用关系构建对象时自动实现这一点,但这里的情况似乎不是这样

如果我这样做,它会起作用的

@project = current_user.projects.build(project_params)
@project.users << current_user

但这感觉不正确。我哪里做错了?

project不应该有很多:用户而不是:项目吗?我想你用错了。当创建成员身份时会进行关联,因为您正在对多对多连接使用成员身份模型。您使用它的方式,可能最好使用直接多对多使用has_和wou-belies_-to_-mani不认为这是对的,当关系本身有属性时,使用has_-many,through,在这种情况下,看起来这可能是rails中的一个bug:啊,我没有看到。很惊讶他们还没有合并修复程序
@project = current_user.projects.build(project_params)
@project.users << current_user