Rails:如何将自定义参数传递给控制器方法?
我是Rails的新手。
我想跟踪post的阅读频率,以便按照受欢迎程度对其进行排名。 因此,我将在posts
表中有一个数据库列read_count
,每次调用#show时它会递增1。
但是,如果管理员已登录并希望通过#show方法预览post,我不希望read_count
增加。
我认为在params散列中传递一个自定义参数(例如preview=true
是最好的。 然后,如果preview
评估为false或nil,#show将仅增加read_count
。 但是,我该怎么做? 在params哈希中添加preview=true
的正确方法是什么?
或者在控制器上实现#preview方法会更好吗?
下面的答案之一可能是一个更好的方法,但回答你如何通过额外的参数的问题。 您可以将它们添加到url助手的末尾,因此如果现有链接如下所示:
link_to’显示’,post_path(id)
只需将其更改为:
link_to’显示’,post_path(id)+’?preview = true’
做一些像这样的事情:
@post.read_count.increment! unless user_signed_in? && current_user.admin?
为什么不通过控制器动作本身而不是发送参数? 如果它被命中并且不是管理员,那么增加计数,似乎是一个更简单的解决方案。