Rails 4.0.3 - has_many 通过未定义的方法 'name' 用于 nil:NilClass - 仅在生产中
Rails 4.0.3 - has_many through undefined method 'name' for nil:NilClass - only on production
我有一个分支模型
class Branch < ActiveRecord::Base
validates :name, presence: true
has_many :company_branches
has_many :companies, -> { uniq }, :through => :company_branches
end
和公司模型
class Company < ActiveRecord::Base
has_many :company_branches
has_many :branches, -> { uniq }, :through => :company_branches
end
公司可以通过company_branches
拥有多个分支机构
class CompanyBranch < ActiveRecord::Base
belongs_to :branch, touch: true
belongs_to :company, touch: true
end
在我的本地机器上一切正常,但是当我尝试在我的生产服务器上保存表单时,我得到:NoMethodError (undefined method
name' for nil:NilClass)`
我控制器中的调用是@company.update_attributes(company_params) - 控制器接收 branch_ids 作为数组,如 branch_ids => [1, 2, 3]
控制器的有趣部分(它在@company.update_attributes(company_params)处失败):
class Admin::CompaniesController < Admin::AdminController
respond_to :html, :json
load_and_authorize_resource
def update
@company = Company.find(params[:id])
@company.update_attributes(company_params)
....
end
private
def company_params
params.require(:company).permit(:id, branch_ids: [])
end
end
澄清一下:我尝试了很多东西,目前我的生产服务器上只有一个分支。即使只有一个分支,我在尝试保存它时也会遇到错误。
编辑:我在这里发布了完整的堆栈跟踪:http://pastebin.com/tw6hjkyF
Active Record 存在错误,您需要升级 Rails,或将 ruby 从 2.2 降级到 2.1.8 或更低版本。
我有一个分支模型
class Branch < ActiveRecord::Base
validates :name, presence: true
has_many :company_branches
has_many :companies, -> { uniq }, :through => :company_branches
end
和公司模型
class Company < ActiveRecord::Base
has_many :company_branches
has_many :branches, -> { uniq }, :through => :company_branches
end
公司可以通过company_branches
拥有多个分支机构class CompanyBranch < ActiveRecord::Base
belongs_to :branch, touch: true
belongs_to :company, touch: true
end
在我的本地机器上一切正常,但是当我尝试在我的生产服务器上保存表单时,我得到:NoMethodError (undefined method
name' for nil:NilClass)`
我控制器中的调用是@company.update_attributes(company_params) - 控制器接收 branch_ids 作为数组,如 branch_ids => [1, 2, 3]
控制器的有趣部分(它在@company.update_attributes(company_params)处失败):
class Admin::CompaniesController < Admin::AdminController
respond_to :html, :json
load_and_authorize_resource
def update
@company = Company.find(params[:id])
@company.update_attributes(company_params)
....
end
private
def company_params
params.require(:company).permit(:id, branch_ids: [])
end
end
澄清一下:我尝试了很多东西,目前我的生产服务器上只有一个分支。即使只有一个分支,我在尝试保存它时也会遇到错误。
编辑:我在这里发布了完整的堆栈跟踪:http://pastebin.com/tw6hjkyF
Active Record 存在错误,您需要升级 Rails,或将 ruby 从 2.2 降级到 2.1.8 或更低版本。