agged_with(params [:skill])ArgumentError:参数个数错误(给定2,预期为1)

时间:2016-03-16 07:48:02

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

我在Rails 5 beta 3中遇到了gem acts-as-taggable-on的问题。

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   `消毒&#39;

2 个答案:

答案 0 :(得分:5)

看起来tagged_with内部正在调用quote_valuealias_methodsanitize

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

请参阅acts_as_taggableActiveRecord::Sanitization和 引入此更改的commit

答案 1 :(得分:0)

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

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