用于计数行的Rails方法返回“错误的参数数量(0表示2)”

时间:2013-04-27 06:54:33

标签: ruby-on-rails ruby activerecord rails-activerecord

我在我的视图中绘制每个投票值(1-4星)的投票金额,并在我的控制器中有一个方法来计算投票数(行数)。

我的控制器(/app/controllers/entry_controller.rb):

before_filter :count_votes, :only => :track

...

protected
def count_votes(value, id)
  Vote.where(:value => value, :entry_id => id).count
end

我的观点(/app/views/entries/track.html.erb):

{ amount: '1', value: <%= count_votes(1, @entry.id) %>},

但是Rails给了我

ArgumentError in EntriesController#track: wrong number of arguments (0 for 2)

我发送了两个值(1和@ entry.id)。我该怎么做才能使我的方法有效?

感谢所有帮助。

2 个答案:

答案 0 :(得分:2)

好的,不是当我第二次重读你的问题时,它引起了我的注意:

您有方法#count_votes,用作过滤器之前。但是对于像过滤器一样工作的方法,它无法获得任何参数。过滤器用于根据params获取数据(获取@current_user,基于@user获取params[:id])或检查当前请求是否有效 - 用户有权访问此项方法(让它基于某些授权库,或者只是检查标志,检查记录是否可用等等。)

您不应该使用过滤器之前作为操作的先决条件,或者作为条件测试使用此操作是否应该可访问,如果不是,则重定向。从你的例子来看,这两者都不存在。

看看http://guides.rubyonrails.org/action_controller_overview.html#filters

答案 1 :(得分:0)

您需要将适当的参数传递给before_filter调用。

before_filter { |c| c.count_votes 1, @entry.id  }