Ruby on rails 使用xhr对rails的控制器动作短路
有没有一种方法可以使一个动作与一个方法短路,并确保以后在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 但是,如果设置不应
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很酷,如果你想把你的评论变成回答的形式,我会接受的。