将参数传递给控制器​​中的回调

时间:2014-10-07 16:44:11

标签: ruby-on-rails callback

我在我的应用程序控制器中有这两种方法我想要的是在我的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

3 个答案:

答案 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。否则,如果从其他任何地方调用该方法"手动",您可以选择将您希望的任何值传递给该方法。