我在我的视图中绘制每个投票值(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)。我该怎么做才能使我的方法有效?
感谢所有帮助。
答案 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 }