Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用xhr对rails的控制器动作短路_Ruby On Rails_Ajax_Controller_Short Circuiting - Fatal编程技术网

Ruby on rails 使用xhr对rails的控制器动作短路

Ruby on rails 使用xhr对rails的控制器动作短路,ruby-on-rails,ajax,controller,short-circuiting,Ruby On Rails,Ajax,Controller,Short Circuiting,有没有一种方法可以使一个动作与一个方法短路,并确保以后在Rails中不会调用其他方法 def update return head(:unauthorized) unless available_user_settings? if setting.update.... ... end 我想做一些更像: def update ensure_settings_modifiable! if setting.update.... ... end 但是,如果设置不应

有没有一种方法可以使一个动作与一个方法短路,并确保以后在Rails中不会调用其他方法

def update
   return head(:unauthorized) unless available_user_settings?
   if setting.update....
   ...
end
我想做一些更像:

def update
   ensure_settings_modifiable!
   if setting.update....
   ...
end
但是,如果设置不应更新,我不知道有什么好方法可以渲染头部并停止其余操作。

您可以:

def update
  # stop action if `false` is returned. Otherwise continue
  settings_modifiable? or return
  ...
end
您可以在行动前使用以下内容:

before_action :ensure_settings_modifiable!, only: [:update]

private

def ensure_settings_modifiable!
  head(:unauthorized) unless available_user_settings?
end

由于如果在before\u操作中调用head,更新操作将不会执行

我想知道是否有一种方法可以将head:unauthorized(未经授权),除非可用的用户设置?内部确保\u设置\u可修改!不需要在主操作中返回。我认为这是可行的,因为非ajax b/c重定向将切断控制器中的执行线路。但我不知道ajax的反应。@unflores:这并不会阻止你将头放在你的方法上。请确保也从中返回false:-您是否考虑过将其转换为一个before_action回调?Derp,我想我应该使用RTFM。如果“before”筛选器呈现或重定向,则该操作将不会运行。-我想我可以显式调用render,我来看看。谢谢Marc。如果你打电话给head,那么你不需要直接打电话来渲染。@MarcRohloff很酷,如果你想把你的评论变成回答的形式,我会接受的。