【问题标题】:agged_with(params[:skill]) ArgumentError: wrong number of arguments (given 2, expected 1)agged_with(params[:skill]) ArgumentError: 参数数量错误(给定 2,预期 1)
【发布时间】:2016-07-01 23:20:45
【问题描述】:

我在 Rails 5 beta 3 中遇到 gem 作为可标记的问题。

project.rb​:

class Project < ActiveRecord::Base       
  acts_as_taggable
  acts_as_taggable_on :skills
end

routes.rb

get 'tags/:skill', to: 'projects#index', as: :skill

projects_controller.rb

class ProjectsController < ApplicationController
  def index
    if params[:category] && Category.exists?(params[:category])
      @category = Category.find(params[:category])
      @projects = @category.projects.order("projects.created_at DESC")    
    elsif params[:skill]
      @projects = Project.tagged_with(params[:skill])
    else  
      @projects = Project.all
    end

    @categories = Category.all
  end
end

在线@projects = Project.tagged_with(params[:skill])我收到以下错误:

ArgumentError:参数数量错误(给定 2,预期 1)来自 /usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-5.0.0.beta3/lib/active_record/sanitization.rb:8:in `消毒'

【问题讨论】:

  • 可能是params[:skill] 持有技能标签数组?
  • 我检查了 tagged_with('ios')。同样的错误

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

看起来tagged_with 在内部调用quote_value,这是sanitizealias_method

sanitize 只需要一个参数,但 tagged_with 使用两个参数调用 quote_value,这会导致问题。

请参阅acts_as_taggableActiveRecord::Sanitizationcommit 介绍了此更改。

【讨论】:

  • 我检查了 tagged_with('ios')。同样的错误。一个论点
  • 这不是您传递给 tagged_with 的内容,而是 tagged_with 在内部调用的 fair_value。本质上,您使用的acts_as_taggable 版本与rails-5 不兼容。
  • 要么你应该联系 gem 的作者进行修复,要么搜索兼容的 gem(一定有人已经分叉并修复了它),或者自己分叉并修复它或者作为最后的手段猴子在你自己的应用程序中修补问题。
  • 我也有同样的问题。我发现问题记录在 Github 上的 gem 上,地址为 github.com/mbleigh/acts-as-taggable-on/issues/741。我会在那里发表评论。
【解决方案2】:

他们解决了这个问题。从您的 Gemfile 中的 master 分支下载:

gem 'acts-as-taggable-on', :github => 'mbleigh/acts-as-taggable-on', :branch => 'master'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多