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? 

为什么不通过控制器动作本身而不是发送参数? 如果它被命中并且不是管理员,那么增加计数,似乎是一个更简单的解决方案。