2017-04-10 60 views
0

news_controller.rb路由展現行動,而不是自定義操作

class NewsController < ApplicationController 
    before_action :set_news, only: [:show] 
    before_action :authenticate_user!, except: [:show, :index ] 
    def index 

    @news = News.where(state: true).paginate(:page => params[:page], :per_page => 12).order('id DESC') 

    end 

    def new 

     @news = News.new 


    end 

    def show 
    @news_photos = @news.news_photos 
    end 


     def create 
     @news = News.new(news_params) 
     if @news.save 
      if params[:images] 
      params[:images].each do |image| 
       @news.news_photos.create(image: image) 
      end 
      end 

      @news_photos = @news.news_photos 
      redirect_to edit_news_path(@news), notice: "Saved..." 
     else 
      render :new 
     end 
     end 

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

     respond_to do |format| 
      format.html { redirect_to news_index_path } 
     # format.json { head :no_content } 
     end 
    end 

    def search 
     @news = News.search(params[:search]) 
    end 



    private 
     def set_news 
     @news = News.find(params[:id]) 
     end 

    def news_params 
     params.require(:news).permit(:title, :description, :category, :keywords, :user_id, :email, :user_name) 
    end 
    end 

news.rb

 class News < ApplicationRecord 
    extend FriendlyId 
     friendly_id :slug_candidates, use: [:slugged, :finders, :history] 

     def slug_candidates 
     [ :title, 
     [:title, :id] 
      ] 
     end 
     def self.search(search) 
     pg_search_scope :search_full_text, 
       :against => :full_text, 
       :using => { :tsearch => { :prefix => true } } 
       end 
      end 

index.html.erb

 <div class="fh5co-box"> 
      <h3 class="heading">Search</h3> 
      <%= form_tag(look_path, :method => "get") do %> 
      <%= text_field_tag :search, params[:search], placeholder: "Search news" %> 
      <%= submit_tag "Search" %> 
      <% end %> 
     </div> 
    </div> 
</div> 

的routes.rb

 resources :news, :except => [ :search] 
     get 'news/search' => 'news#search', :as => 'look' 

由於我在搜索字段內提交數據,因此它將路由到顯示操作而不是搜索操作。

路線是

ews_index GET  /news(.:format)        news#index 
            POST  /news(.:format)        news#create 
         new_news GET  /news/new(.:format)       news#new 
         edit_news GET  /news/:id/edit(.:format)      news#edit 
          news GET  /news/:id(.:format)       news#show 
            PATCH /news/:id(.:format)       news#update 
            PUT  /news/:id(.:format)       news#update 
            DELETE /news/:id(.:format)       news#destroy 
          look GET  /news/search(.:format)      news#search 

日誌:

 Started GET "/news/search?utf8=%E2%9C%93&search=tax&commit=Search" for 183.83.117.57 at 2017-04-10 07:36:13 -0500 
     Processing by NewsController#show as HTML 
      Parameters: {"utf8"=>"▒~\~S", "search"=>"tax", "commit"=>"Search", "id"=>"search"} 
      ^[[1m^[[36mNews Load (0.5ms)^[[0m ^[[1m^[[34mSELECT "news".* FROM "news" WHERE "news"."slug" = $1 ORDER BY "news"."id" ASC LIMIT $2^[[0m [["slug", "search"], ["LIMIT", 1]] 
      ^[[1m^[[36mNews Load (0.7ms)^[[0m ^[[1m^[[34mSELECT "news".* FROM "news" INNER JOIN "friendly_id_slugs" ON "friendly_id_slugs"."sluggable_id" = "news"."id" AND "friendly_id_slugs"."sluggable_type" = $1 WHERE ("friendly_id_slugs"."sluggable_type" = 'News' AND "friendly_id_slugs"."slug" = 'search') ORDER BY "friendly_id_slugs"."id" DESC LIMIT $2^[[0m [["sluggable_type", "News"], ["LIMIT", 1]] 
     Completed 404 Not Found in 5ms (ActiveRecord: 1.2ms) 



     ActiveRecord::RecordNotFound (can't find record with friendly id: "search"): 

     app/controllers/news_controller.rb:111:in `set_news' 

不知道我在哪裏去了wrong.Is有什麼做的蛞蝓???

任何幫助是高度讚賞。感謝提前!

回答

2

路徑按順序搜索。

換句話說,您顯示的動作匹配get請求/news/(:id)和您的系統進程SHOW。招行:

get 'news/search' => 'news#search', :as => 'look' 

上漲的路線文件,它應該做工精細,但請記住,這將被用來作爲ID /塞塊search。一個清潔的路線是

get '/search/news' => 'news#search', :as => 'look' 

,因爲它會得到news範圍之內,你不會有與新聞模式的衝突。

+0

謝謝你@Killerpixler,工作! – suresh