Rails - link_to去索引动作而不是show

时间:2017-11-12 03:48:28

标签: ruby-on-rails routing

我不知道发生了什么,但是当我按下我的按钮显示帖子时,它会重定向到索引操作,而不是 show

#suggestions_controller.rb

def show
    @suggestion = Suggestion.find(params[:id])
end

#index.html.erb

<% @suggestions.each do |suggestion| %>
... #other code
<li><%= link_to 'Comments', suggestion_path(suggestion), id: 'comments' %></li>
<% end %>

路线: These are my routes

Going to index route

每次按评论按钮,它都会重定向到索引。我的头脑旋转为什么会发生这种情况。我完全相信suggestion_path(suggestion)(就我的路线而言)是show行动的正确路径。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

link_是正确的,它指向您想要的路线,但它与您在服务器上收到的呼叫不对应,有一个参数type =&gt; 3这没有任何意义,对我来说你必须按错了链接

就好像没有使用suggestion_path(建议)而是指向带有s的suggestions_path(建议)并且作为类型发送参数=&gt; 3

检查应用的link_to

答案 1 :(得分:-1)

我有一个顿悟,就是几天前我最近在StackOverflow上做过的post

我将路线更改为

#routes.rb

get 'suggestions/:type', to: 'suggestions#index'

#suggestion_controller.rb

if params[:type].nil?
    @suggestions = Suggestion.order(:cached_votes_up => :desc)
else
    @suggestions = Suggestion.order(:cached_votes_up => :desc).where(:suggestion_type => params[:type])
end

以更优雅的方式取得我所有的19名雇佣兵。

这非常有效,但当我点击评论以显示特定建议时,它会自动路由到suggestions/:type,该#routes.rb get 'suggestions/proxy', to: 'suggestions#index' get 'suggestions/aimee', to: 'suggestions#index' get 'suggestions/arty', to: 'suggestions#index' ... #suggestion_controller.rb case request.env['PATH_INFO'] when '/suggestions/proxy' @suggestions = Suggestion.all.where(:suggestion_type => 'proxy') when '/suggestions/aimee' @suggestions = Suggestion.all.where(:suggestion_type => 'aimee') when '/suggestions/arty' @suggestions = Suggestion.all.where(:suggestion_type => 'arty') ... else @suggestions = Suggestion.all end 指向索引操作。这样做的全部目的是在每次点击特定雇佣兵时过滤我的数据库。

为了解决这个问题,我又回到了我的长篇版本:

WIKI_MARKDOWN_SANITIZE_HTML

现在我的按钮按预期进入 show 动作。

尽管我讨厌这个版本,但我仍然很难找到以更有效的方式构建路由的任何其他优雅方式。