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 %>