0

我正在绘制我认为每个投票值(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)。我应该怎么做才能使我的方法有效?

感谢所有帮助。

4

2 回答 2

2

好吧,不是当我第二次重读你的问题时,它触动了我:

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

您不应该使用 before 过滤器作为操作的先决条件,或者作为条件测试是否可以访问此操作,如果不能访问则重定向。从您的示例中,这两者都不存在。

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

于 2013-04-27T08:01:33.257 回答
0

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

before_filter { |c| c.count_votes 1, @entry.id  }
于 2013-04-27T08:03:53.577 回答