>

DB를 통해 검색하고 항목을 반환하는 Rails 앱이 있습니다. 현재로서는 내 submit_tag를 칠 필요없이 기본 검색 결과 ( "")를 자동으로 반환합니다. submit_tag에 도달 한 후에 만이 작업을 수행하려면 어떻게해야합니까? 어떤 도움이라도 대단히 감사하겠습니다!

여기에 내 견해가 있습니다 :

<%= form_tag(new_design_path, method: :get) do %>
    <%= label_tag(:q, "Search all designs:") %>
    <%= text_field_tag(:q) %>
    <%= submit_tag("Search") %>
  <% end %><br>
  <!-- Button to return one random design --> 
  <%= form_tag(new_design_path, method: :get) do %>
    <%= label_tag(:q, "Inspire me! Click here for a random design:") %>
    <%= submit_tag("Random Design") %>
  <% end %>
  <h2>Search results:</h2>
  <% @random.each do |design| %>  
    <h3><%= design['name'] %></h3>
    <h5><%= image_tag design['thumbnail_url'] %></h5>
  <% end %>
  <% @search.each do |design| %>  
  <div class="design">
    <h3 class="design_name"><%= design['name'] %></h3>
    <h5><%= image_tag design['thumbnail_url'] %></h5>
    <%= button_to 'Save to Favourites',
      designs_path(
        design: design.slice('name', 'thumbnail_url') 
      ),method: :post %>
    </div>
  <% end %>

내 컨트롤러 :

class DesignsController < ApplicationController
    def index
        @designs = Design.all.order("created_at DESC")
    end
    def new
        # returns an array of hashes
        @search = SpoonflowerApi.new.find(params[:q])['results']
        @random = SpoonflowerApi.new.random(rand(1..740579), 1)['results']
    end
    def create
    @design = Design.new(design_params)
    @design.save
        if @design.save
            flash[:notice] = 'Design has been added to favourites!'
        else
            flash[:notice] = 'Design already in Favourites!'
    end
    redirect_to new_design_path
  end
  def destroy
    @design = Design.find(params[:id])
    @design.destroy
    flash[:notice] = 'Design removed from favourites!'
    redirect_to designs_path
  end
  private
  def design_params
    params.require(:design).permit(:name, :thumbnail_url) 
  end
end

  • 답변 # 1

    new  는 초기 양식을 채우는 데 사용되므로 해당 필드에 대해 아무것도 원하지 않으면 @search 를 모두 설정해야합니다.  그리고 @random  새로운 빈 배열에. 모델에 대한 코드를 표시하지 않으므로 Api가 무엇인지 명확하지 않습니다.

    show  양식을 제출하면 전화해야합니다.

    def new
      @search = []
      @random = []
    end
    
    

    그런 다음 로직을 이동하여 검색 결과 또는 무작위 레코드를 show 메소드에 제공하십시오

    def show
      # not sure what you want to do here
      # since it seems like you have 2 buttons you need logic to provide data 
      # based on the button 
      # maybe something like this
      if params[:q].nil?
        @search = []
        @random = Api.new.random(rand(1..740579), 1)['results']
      else
        @search = Api.new.find(params[:q])['results']
        @random = []
      end
    end
    
    

  • 답변 # 2

    잘 이해하면 검색 버튼을 클릭하기 전에 일부 검색 결과가 표시됩니다.

    params [: q]를 SpoonflowerApi에 직접 보내므로 기본값이 반환되고 뷰가 그려지는 것 같습니다.

    컨트롤러를 간단히 업데이트하십시오 :

    def new
        @search=[]
        @search = SpoonflowerApi.new.find(params[:q])['results'] unless params[:q].nil?
        @random = SpoonflowerApi.new.random(rand(1..740579), 1)['results']
    end
    
    

관련 자료

  • 이전 프라이빗 및 퍼블릭 API 아키텍처를 생성하는 방법
  • 다음 node.js - "cors"라이브러리를 사용하여 Express Route에서 CORS를 구성하는 방법