0

ruby on railsを使ってブログアプリの最新記事タイトルを10件取得してみました。これは私がしました。しかし、ルーティングに関しては行き詰まりました。

私が好きなとき

(このコードは記事/インデックスの一部です)

<% @article_titles.each do |article_title|%>
              <% if !article_title.nil? %>
               <div style="margin-top:15px; margin-left:8px"> <%= link_to article_title.title,
               article_path(article_title) %></div> 
            <% end %>    
            <% end %>

ルーティングエラーが発生します

{:action=>"show", :controller=>"articles", :id=>#} エラーに一致するルートがありません。

以下のような別の方法を試しました:-

 <% @article_titles.each do |article_title|%>
              <% if !article_title.nil? %>
               <div style="margin-top:15px; margin-left:8px"> <%= link_to article_title.title,
               "/articles?id=#{article_title.id}"   %></div> 
            <% end %>    
            <% end %>

ルート.rb

match "articles/:id" => "articles#show"

エラーは発生せず("http://localhost:3000/articles?id=")、ブラウザのアドレスバーにのみ表示されますが、アクションは実行されません。

レーキルート:

        new_user_session GET    /users/sign_in(.:format)                          devise/sessions#new
            user_session POST   /users/sign_in(.:format)                          devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)                         devise/sessions#destroy
           user_password POST   /users/password(.:format)                         devise/passwords#create
       new_user_password GET    /users/password/new(.:format)                     devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)                    devise/passwords#edit
                         PUT    /users/password(.:format)                         devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)                           devise/registrations#cancel
       user_registration POST   /users(.:format)                                  devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)                          devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)                             devise/registrations#edit
                         PUT    /users(.:format)                                  devise/registrations#update
                         DELETE /users(.:format)                                  devise/registrations#destroy
                    root        /                                                 articles#index
         dashboard_index GET    /dashboard(.:format)                              dashboard#index
                         POST   /dashboard(.:format)                              dashboard#create
           new_dashboard GET    /dashboard/new(.:format)                          dashboard#new
          edit_dashboard GET    /dashboard/:id/edit(.:format)                     dashboard#edit
               dashboard GET    /dashboard/:id(.:format)                          dashboard#show
                         PUT    /dashboard/:id(.:format)                          dashboard#update
                         DELETE /dashboard/:id(.:format)                          dashboard#destroy
                    tags GET    /tags(.:format)                                   tags#index
                         POST   /tags(.:format)                                   tags#create
                 new_tag GET    /tags/new(.:format)                               tags#new
                edit_tag GET    /tags/:id/edit(.:format)                          tags#edit
                     tag GET    /tags/:id(.:format)                               tags#show
                         PUT    /tags/:id(.:format)                               tags#update
                         DELETE /tags/:id(.:format)                               tags#destroy
        article_comments GET    /articles/:article_id/comments(.:format)          comments#index
                         POST   /articles/:article_id/comments(.:format)          comments#create
     new_article_comment GET    /articles/:article_id/comments/new(.:format)      comments#new
    edit_article_comment GET    /articles/:article_id/comments/:id/edit(.:format) comments#edit
         article_comment GET    /articles/:article_id/comments/:id(.:format)      comments#show
                         PUT    /articles/:article_id/comments/:id(.:format)      comments#update
                         DELETE /articles/:article_id/comments/:id(.:format)      comments#destroy
                                /articles/:article_id/articles/:id(.:format)      articles#show
                articles GET    /articles(.:format)                               articles#index
                         POST   /articles(.:format)                               articles#create
             new_article GET    /articles/new(.:format)                           articles#new
            edit_article GET    /articles/:id/edit(.:format)                      articles#edit
                 article GET    /articles/:id(.:format)                           articles#show
                         PUT    /articles/:id(.:format)                           articles#update
                         DELETE /articles/:id(.:format)                           articles#destroy

article_controller.rb

 def index
          @articles = Article.all(:order => "created_at DESC")
      @article_titles = Article.select(:title).first(10)
      end
    def show
      @article = Article.find(params[:id])

    end

ルート.rb

Mau::Application.routes.draw do
  devise_for :users
  root :to => 'articles#index'
  resources :dashboard
  resources :tags
  resources :articles do
  resources :comments
  match "articles/:id" => "articles#show"
end

デバッガー ログ。

ActionController::RoutingError (No route matches [GET] "/assets/defaults.js"):
  actionpack (3.2.11) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  actionpack (3.2.11) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  railties (3.2.11) lib/rails/rack/logger.rb:32:in `call_app'
  railties (3.2.11) lib/rails/rack/logger.rb:16:in `block in call'
  activesupport (3.2.11) lib/active_support/tagged_logging.rb:22:in `tagged'
  railties (3.2.11) lib/rails/rack/logger.rb:16:in `call'
  actionpack (3.2.11) lib/action_dispatch/middleware/request_id.rb:22:in `call'
  rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
  rack (1.4.5) lib/rack/runtime.rb:17:in `call'
  activesupport (3.2.11) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.4.5) lib/rack/lock.rb:15:in `call'
  actionpack (3.2.11) lib/action_dispatch/middleware/static.rb:62:in `call'
  railties (3.2.11) lib/rails/engine.rb:479:in `call'
  railties (3.2.11) lib/rails/application.rb:223:in `call'
  rack (1.4.5) lib/rack/content_length.rb:14:in `call'
  railties (3.2.11) lib/rails/rack/log_tailer.rb:17:in `call'
  rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service'
  c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
  c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
  c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'

記事の表示アクションに何かを追加する必要がありますか? 私に提案してください。

4

3 に答える 3

1

問題は、 title のみを選択しているため、 @article_titles レコードに id 属性が含まれていないことですArticle.select(:title)。あなたがしようとしていることを達成するためのより良い方法は、あなたのコントローラにあるでしょう:

@articles = Article.order("created_at DESC")
@first_articles = @articles.limit(10)

@article_titles を使用していた場所に @first_articles を使用します。

また、@articles がまったく必要かどうかも質問します (最初の 10 レコードだけを表示していますか?) コードでは、ActiveRecord::Relation であり、実際にロードしない限りロードされません (データベースにヒットします)。ビューで変数を使用しますが、それは別のSOの質問のトピックです

于 2013-04-16T16:08:22.147 に答える
1

endこれで問題が解決する場合としない場合がありますが、ルートブロックにend がありません:

Mau::Application.routes.draw do
  devise_for :users
  root :to => 'articles#index'
  resources :dashboard
  resources :tags
  resources :articles do
  resources :comments
  match "articles/:id" => "articles#show"
end

する必要があります

Mau::Application.routes.draw do
  devise_for :users
  root :to => 'articles#index'
  resources :dashboard
  resources :tags
  resources :articles do
    resources :comments
  end
end

matchの一部であるため、持っているルートは必要ないことに注意してくださいresources :articles

編集

また、次のように ID のみを渡してみてください。

<% @article_titles.each do |article_title|%>
    <% if !article_title.nil? %>
         <div style="margin-top:15px; margin-left:8px"> 
             <%= link_to article_title.title, article_path(article_title.id) %>
         </div> 
    <% end %>    
<% end %>
于 2013-04-16T16:06:09.513 に答える