Rails控制器参数 - CanCan的自定义更新方法

时间:2014-02-11 19:22:15

标签: ruby-on-rails cancan

我正在尝试在更新时限制对某个属性的访问。

管理员可以随时更新所有Need除了他们只能在Need的{​​{1}} bool更新is_public {1}}是need_state

CanCan不允许根据正在设置的特定属性来限制更新操作...所以我认为他们唯一的方法是创建一个名为in_progress的特殊方法。

我的表格正在调用它并发送以下参数:

set_is_public

如何更新控制器中的操作需求?
我无法弄清楚如何读取这些参数:

  • 根据ID找到需求;
  • 将其{"utf8"=>"✓", "authenticity_token"=>"2u9AZ7AJDYQrXm3LubMAxlxhjbsQ14myUTyOSyvoKzk=", "need"=>{"id"=>"5", "is_public"=>"true"}, "commit"=>"Set as Public"} 属性更新为is_public参数的值。

1 个答案:

答案 0 :(得分:1)

你发布的params显示了一个嵌套的散列,所以你应该只需要执行以下操作:

the_need = Need.find( params["need"]["id"] )
the_need.is_public = params["need"]["is_public"]
the_need.save

我希望有所帮助!

编辑添加:您可能需要处理参数限制,具体取决于您的Rails版本,一种技术是以前的过滤器:

params.require(:need).permit(:id, :is_public)

如果没有帮助,请澄清您的问题