Ruby on rails Rails 4.0.3-通过未定义的方法';名称';对于nil:NilClass-仅在生产时
我有一个分支模型Ruby on rails Rails 4.0.3-通过未定义的方法';名称';对于nil:NilClass-仅在生产时,ruby-on-rails,ruby-on-rails-4,has-many-through,Ruby On Rails,Ruby On Rails 4,Has Many Through,我有一个分支模型 class Branch < ActiveRecord::Base validates :name, presence: true has_many :company_branches has_many :companies, -> { uniq }, :through => :company_branches end 澄清一下:我尝试了很多方法,目前在我的生产服务器上只有一个分支。即使只有一个分支,当我试图保存它时,也会出现错误
class Branch < ActiveRecord::Base
validates :name, presence: true
has_many :company_branches
has_many :companies, -> { uniq }, :through => :company_branches
end
澄清一下:我尝试了很多方法,目前在我的生产服务器上只有一个分支。即使只有一个分支,当我试图保存它时,也会出现错误
编辑:我在这里发布了完整的堆栈跟踪:活动记录有一个bug,你需要升级Rails,或者将ruby从2.2降级到2.1.8或更低版本。你的应用程序托管在哪里?你运行过rake db:migrate吗?该应用程序托管在自己的服务器上。我们使用capistrano进行部署,因此没有迁移问题。该应用程序现在已经运行了好几年。如果它在@company.update_attributes()等处失败,并且类为nil,这难道不意味着你的@company实例为nil吗?@OliverM我添加了stacktrace。我希望这有帮助。我认为这是正确的暗示。我刚刚注意到我在本地机器上运行2.0.0,在生产服务器上运行2.2.0,我想看看是否与此有关。非常感谢!这就是原因。
class Company < ActiveRecord::Base
has_many :company_branches
has_many :branches, -> { uniq }, :through => :company_branches
end
class CompanyBranch < ActiveRecord::Base
belongs_to :branch, touch: true
belongs_to :company, touch: true
end
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