gpt4 book ai didi

ruby-on-rails - 创建关系时如何即时设置连接模型的属性?

转载 作者:行者123 更新时间:2023-12-04 03:52:54 24 4
gpt4 key购买 nike

我有一个 has_many :through 用户和项目之间的关系,通过所有权连接模型。我希望能够在创建用户和新项目之间的关系时设置所有权模型的属性。这是我目前所拥有的:

def create
@project = Project.new(params[:project])
if @project.save
current_user.projects << @project
flash[:success] = "Project created!"
redirect_to @project
else
flash[:error] = "Project not created."
end
end

基本上,在为给定用户创建新项目时,我不知道如何在所有权模型中设置值“owner_type”,因为我没有在项目创建 Controller 中直接提及所有权加入模型。我该怎么做?

这是我的所有权(加入)模型:

class Ownership < ActiveRecord::Base
attr_accessible :owner_type

belongs_to :project
belongs_to :user

validates :user_id, :presence => true

validates :project_id, :presence => true

validates :owner_type, :presence => true

end

和我的用户模型:

class User < ActiveRecord::Base
attr_accessible :name, :email, :admin, :projects

has_many :ownerships
has_many :projects, :through => :ownerships

accepts_nested_attributes_for :projects

和我的项目模型:

class Project < ActiveRecord::Base
attr_accessible :name, :description

has_many :ownerships
has_many :users, :through => :ownerships

最佳答案

关键是在点击 @project.save 之前建立(而不是创建)关联 当您点击保存时,项目首先被持久化,如果持久化成功,所有权将被创建也是。

def create
@project = Project.new(params[:project])
@project.ownerships.build(:user => current_user, :owner_type => 'chief')

if @project.save
flash[:success] = "Project created!"
redirect_to @project
else
flash[:error] = "Project not created."
end
end

关于ruby-on-rails - 创建关系时如何即时设置连接模型的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com