我在我的应用程序控制器中有这两种方法我想要的是在我的projects_controller中使用它们作为回调,但它给了我错误,有人能告诉我如何解决这个问题。
before_action :permit_show(@project), only:[:show]
before_action :permit_edit(@project), only:[:edit]
def permit_edit(object)
if (current_user.id != object.creator_id)
render_404
end
end
def permit_show(object)
members = object.users
if (!members.include? current_user)
render_404
end
end
答案 0 :(得分:5)
要传入参数,您必须使用块。
before_filter(only: [:show]) { permit_show(@project) }
before_filter(only: [:edit]) { permit_edit(@project) }
答案 1 :(得分:1)
您可以使用send方法传递类似的参数 -
before_action only: [:show] do |c|
c.send(:permit_show, @project)
end
before_action only: [:edit] do |c|
c.send(:permit_edit, @project)
end
答案 2 :(得分:1)
归功于this so answer。
...您可以通过使用可选方法参数来实现您正在寻找的内容,如下所示:
def cache_bust(callback = true)
... method body
end
在从after_update回调调用方法的方案中,不传递参数,但默认为true。否则,如果从其他任何地方调用该方法"手动",您可以选择将您希望的任何值传递给该方法。