Ruby on rails Create有很多:通过Rails 4中的关联来构建新对象
有以下代码:Ruby on rails Create有很多:通过Rails 4中的关联来构建新对象,ruby-on-rails,Ruby On Rails,有以下代码: def create @business = user.businesses.build(business_params) if @business.save business.set_logo_url redirect_to admin_businesses_path, flash: { notification: 'New business has been created successfully' } else
def create
@business = user.businesses.build(business_params)
if @business.save
business.set_logo_url
redirect_to admin_businesses_path, flash: { notification: 'New business has been created successfully' }
else
render 'new'
end
end
在本准则生效之前;用户“有很多”业务,所有工作都很好,但现在用户“有很多:通过”,这段代码创建了一个新的业务,但没有关系!如何修复此代码以保存此业务逻辑?提前谢谢 尝试在您的
用户
模型中添加:反向的
class User < ActiveRecord::Base
has_many :business_types, inverse_of: :user #let your relationship model to be BusinessType
has_many :businesses, :through => :business_types
...
end
class用户:业务类型
...
结束
另外,不要忘记在您的关系模型中为
添加接受嵌套的属性\u
def create
@business = user.businesses.create(business_params)
if @business.save
business.set_logo_url
redirect_to admin_businesses_path, flash: { notification: 'New business has been created successfully' }
else
render 'new'
end
end
但现在用户“有很多:通过”
这是问题的核心——Rails在很多方面都做得很好,但它还不能读懂思想
您遇到的问题是,您试图构建的关联要么不存在,要么是另一个关联(通过
)参数的一部分。让我解释一下:
有很多
当您.build
一个对象时-它必须与您正在使用的“父”对象相关联。有许多
关联直接与父对象关联,允许您。单独构建它:
#app/models/user.rb
class User < ActiveRecord::Base
has_many :businesses
end
现在,您必须以稍微不同的方式构建关联:
@user.business_users.build.build_business
看看你怎么不用叫“加入”模型
以前,您可以直接调用企业
协会。但是,当您正在使用另一个模型时,也必须构建该模型
表格
转换为表单后,您将得到以下设置:
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def new
@user = User.new
@user.business_users.build.build_business
end
def create
@user = User.new user_params
@user.save
end
private
def user_params
params.require(:user).permit(:user, :params, business_users_attributes: [business_attributes: []])
end
end
#app/views/users/new.html.erb
<%= form_for @user do |f| %>
<%= f.fields_for :business_users do |bu| %>
<%= bu.fields_for :user do |u| %>
<%= u.text_field ... %>
<% end %>
<% end %>
<%= f.submit %>
<% end %>
#app/controllers/users_controller.rb
类UsersController
什么是关系模型?
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def new
@user = User.new
@user.business_users.build.build_business
end
def create
@user = User.new user_params
@user.save
end
private
def user_params
params.require(:user).permit(:user, :params, business_users_attributes: [business_attributes: []])
end
end
#app/views/users/new.html.erb
<%= form_for @user do |f| %>
<%= f.fields_for :business_users do |bu| %>
<%= bu.fields_for :user do |u| %>
<%= u.text_field ... %>
<% end %>
<% end %>
<%= f.submit %>
<% end %>