0

我写这个问题是因为我在 StackOverflow 和/或任何相关论坛中没有找到任何解决方案。我的问题基本上是这个。

我在 Rails 项目中添加了一个名为“news”的表。该表是在 Mysql 中以“news”的名称创建的。

按照这些步骤,我遇到了链接到“news”将我重定向到“news.1”而不是“news/1”的情况。

我的路线.rb

match "news" => 'homepage#news'
match "news/:id" => 'homepage#news_details'

我的控制器

def news
@news = News.all

respond_to do |format|
  format.html { render layout: "news" } # index.html.erb
  format.json { render json: @news }
end
end

def news_details
@news = News.find(params[:id])

respond_to do |format|
  format.html { render layout: "news" } # index.html.erb
  format.json { render json: @users }
end
end

在 news.html.erb

<div class="postDetails">
<a href="trainers-single.html" class="postTitle"><%= news.title %></a>
<p><%= truncate news.details, :length => 90 %></p>
<%= link_to 'MORE INFO', news, :class => "button-small-theme rounded3" %>
</div> 

在 news.html.erb 中的 link_to MORE INFO,news 将我重定向到“news.1”而不是“news/1”

感谢您的阅读。

4

1 回答 1

1

尝试将路由作为命名路由访问。如果您rake routes在控制台中运行,请查看它为路由分配的名称。如果没有,则将您的 routes.rb 更改为

match "news/:id", to: "homepage#news_details", as: "show_news"

然后在您看来,使用

<%= link_to "MORE INFO", show_news_path(news), class: "button-small-theme rounded3" %>

看看是否有帮助。如果没有,可能值得尝试以更类似轨道的方式设置您的应用程序。您可以通过HomepageControllerwhich 访问您的新闻资源,但如果NewsController您定义了两条 rails 会自动为您提供的路线,那么使用专用的会更合适。我会更倾向于:

  • 创建一个新控制器 -NewsController
  • 添加resources :news到 routes.rb

在你的新闻控制器中,你应该有类似的东西:

class NewsController < ApplicationController

    def index
        @news = News.all
        respond_to do |format|
          format.html { render layout: "news" }
          format.json { render json: @news }
        end
    end      

    def show
        @news = News.find(params[:id])
        respond_to do |format|
          format.html { render layout: "news" }
          format.json { render json: @news }
        end
    end

end

然后,您只需将视图文件移动到news文件夹而不是dashboard文件夹中,它就应该开始工作了。然后在您看来,您的链接将与您现在拥有的链接相同,但它应该确实有效:)

于 2013-05-05T19:00:24.993 回答