简体   繁体   English

Search#search中的ActionController :: UrlGenerationError

[英]ActionController::UrlGenerationError in Search#search

I have installed ElasticSearch and I am unable to search when I use this: 我已经安装了ElasticSearch,使用此工具时我无法搜索:

<%= link_to genre_linker.genre, movie_genre_linker_path(@movie, genre_linker) %>

but the results are correctly displayed when I use this: 但是当我使用此方法时,结果将正确显示:

<%= link_to genre_linker.genre %>

So, since the search works, I am thinking the problem is in my syntax. 因此,由于搜索有效,因此我认为问题出在我的语法上。

this is my route: 这是我的路线:

movie_genre_linker GET    /movies/:movie_id/genre_linkers/:id(.:format)         genre_linkers#show 

this is the error message: 这是错误消息: 在此处输入图片说明

I am still sort of a noob, so any guidance will be greatly appreciated. 我还是一个菜鸟,所以任何指导将不胜感激。

movies_controller.rb movies_controller.rb

class MoviesController < ApplicationController
  before_action :set_movie, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, except: [:index, :show]


  def index
    @movies = Movie.all
  end


  def show
    @genre_linkers = GenreLinker.where(movie_id: @movie.id).order("created_at DESC")
     @common_linkers = CommonLinker.where(movie_id: @movie.id).order("created_at DESC")
    @theme_linkers = ThemeLinker.where(movie_id: @movie.id).order("created_at DESC")
     @location_linkers = LocationLinker.where(movie_id: @movie.id).order("created_at DESC")
  end


  def new
     @movie = current_user.movies.build
  end


  def edit
  end

  def create
    @movie = current_user.movies.build(movie_params)

    respond_to do |format|
      if @movie.save
        format.html { redirect_to @movie, notice: 'Movie was successfully created.' }
        format.json { render :show, status: :created, location: @movie }
      else
        format.html { render :new }
        format.json { render json: @movie.errors, status: :unprocessable_entity }
      end
    end
  end


  def update
    respond_to do |format|
      if @movie.update(movie_params)
        format.html { redirect_to @movie, notice: 'Movie was successfully updated.' }
        format.json { render :show, status: :ok, location: @movie }
      else
        format.html { render :edit }
        format.json { render json: @movie.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @movie.destroy
    respond_to do |format|
      format.html { redirect_to movies_url, notice: 'Movie was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private

    def set_movie
      @movie = Movie.find(params[:id])
    end

    def movie_params
       params.require(:movie).permit(:title, :description, :movie_length, :poster)
    end
end

genre_linkers_controller.rb genre_linkers_controller.rb

class GenreLinkersController < ApplicationController
  before_action :set_genre_linker, only: [:show, :edit, :update, :destroy, :votes]
  before_action :set_movie
  before_action :authenticate_user!, except: [:index, :show]
  respond_to :html

  def index
    @genre_linkers = GenreLinker.all
    respond_with(@genre_linkers)
  end

  def show
    @genre_linker = GenreLinker.find(params[:id])
  end

   def vote
      value = params[:type] == "up" ? 1 : -1
      @genre_linker = GenreLinker.find(params[:id])
     @genre_linker.add_or_update_evaluation(:votes, value, current_user)
      redirect_to :back, notice: "thanks for the vote"
   end


  def new
    @genre_linker = GenreLinker.new
    respond_with(@genre_linker)
  end

  def edit
  end

  def create
     @genre_linker = GenreLinker.new(genre_linker_params)
     @genre_linker.user_id = current_user.id
     @genre_linker.movie_id = @movie.id

     if @genre_linker.save
        redirect_to @movie
    else
      render 'new'
    end
  end

  def update
    @genre_linker.update(genre_linker_params)
    respond_with(@genre_linker)
  end

  def destroy
    @genre_linker.destroy
    respond_with(@genre_linker)
  end

  private
    def set_genre_linker
      @genre_linker = GenreLinker.find(params[:id])
    end

   def set_movie
      @movie = Movie.find(params[:movie_id])
   end

    def genre_linker_params
       params.require(:genre_linker).permit(:genre, :description)
    end
end

search/search.html.erb 搜索/ search.html.erb

<%= form_for search_path, method: :get do |f| %>
  <p>
    <%= f.label "Search for" %>
    <%= text_field_tag :q, params[:q] %>
    <%= submit_tag "Go", name: nil %>
  </p>
<% end %>

<ul>
  <% @genre_linkers.each do |genre_linker| %>
    <li>
      <%= link_to genre_linker.genre, movie_genre_linker_path(@movie, genre_linker) %>


    </li>

</ul
    <% end %>

search_controller.rb search_controller.rb

class SearchController < ApplicationController
  def search
  if params[:q].nil?
    @genre_linkers = []
  else
    @genre_linkers = GenreLinker.search params[:q]
  end
end

end

这有效: <%= link_to genre_linker.genre, movie_path(genre_linker.movie.id) %>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM