2016-12-08 2 views
0

Хотя я задал этот вопрос ранее, но еще не решил его. У меня есть модель студента со столбцом NAME, SCHOOLNAME, PARENTNAME и т. Д. Теперь я хочу сделать поиск, где, когда пользователь может выполнить поиск со следующими именами столбцов ... Например: если пользователь ставит NAME в строке поиска, тогда он должен получить все имена учеников, если пользователь выполнил поиск с именем SCHOOL NAME, тогда он должен получить все название школы .... Я много пробовал, но не достиг того, что хотел Помощь будет оценена ... СпасибоПоиск по названию столбца в рельсах

Извините, что не добавляли этот вопрос соответствующим образом.

После добавления @fbelanger решение в моем проекте, на самом деле ничего не произошло то, что я ищу это дает мне тот же результат ...

мой контроллер

class DataController < ApplicationController 
    before_action :set_datum, only: [:show, :edit, :update, :destroy] 

    # GET /data 
    # GET /data.json 
    def index 
    @data = Datum.all 
    query = params[:query] 
    Datum.all.map(&:query) if Datum::QUERIABLE.include?(query) 
    end 
    # GET /data/1 
    # GET /data/1.json 
    def show 
    end 

    # GET /data/new 
    def new 
    @datum = Datum.new 
    end 

    # GET /data/1/edit 
    def edit 
    end 

    # POST /data 
    # POST /data.json 
    def create 
    @datum = Datum.new(datum_params) 

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

    # PATCH/PUT /data/1 
    # PATCH/PUT /data/1.json 
    def update 
    respond_to do |format| 
     if @datum.update(datum_params) 
     format.html { redirect_to @datum, notice: 'Datum was successfully updated.' } 
     format.json { render :show, status: :ok, location: @datum } 
     else 
     format.html { render :edit } 
     format.json { render json: @datum.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /data/1 
    # DELETE /data/1.json 
    def destroy 
    @datum.destroy 
    respond_to do |format| 
     format.html { redirect_to data_url, notice: 'Datum was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_datum 
     @datum = Datum.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def datum_params 
     params.require(:datum).permit(:name, :school, :hospital, :city, :food) 
    end 
end 

мою модель

class Datum < ActiveRecord::Base 
    QUERIABLE = %w(name city) 

end 

мой индекс

<p id="notice"><%= notice %></p> 

<h1>Listing Data</h1> 

<%= form_tag(data_path, :method => "get", id: "search-form") do %> 
<%= text_field_tag :search, params[:search], placeholder: "Search here" %> 
<%= submit_tag "Search" %> 
<% end %> 

<table> 
    <thead> 
    <tr> 
     <th>Name</th> 
     <th>School</th> 
     <th>Hospital</th> 
     <th>City</th> 
     <th>Food</th> 
     <th colspan="3"></th> 
    </tr> 
    </thead> 

    <tbody> 
    <% @data.each do |datum| %> 
     <tr> 
     <td><%= datum.name %></td> 
     <td><%= datum.school %></td> 
     <td><%= datum.hospital %></td> 
     <td><%= datum.city %></td> 
     <td><%= datum.food %></td> 
     <td><%= link_to 'Show', datum %></td> 
     <td><%= link_to 'Edit', edit_datum_path(datum) %></td> 
     <td><%= link_to 'Destroy', datum, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 

<br> 

<%= link_to 'New Datum', new_datum_path %> 
+0

Я помню, как я ответил на это раньше. Разве это не работает? http://stackoverflow.com/questions/40955019/advance-table-search-in-rails/40966091#40966091 –

+0

^Ничего себе, тот же вопрос, тот же ответ. – fbelanger

ответ

0

Предположим, что мы находимся в каком-то действии контроллера:

query = params[:query].underscore 
Student.all.map(&:query) if Student::QUERIABLE.include?(query) 

Тогда я хотел бы добавить константу QUERIABLE моей Student модели, так что пользователь не может ничего другого, кроме того, что я позволил запросить.

QUERIABLE = %w(name school_name parent_name) 

Причина никто не отвечает на этот вопрос, потому что вы не просите техническое решение проблемы, больше как просить для конечного результата работы.

Хотя вы говорите, что вы «много пробовали», я очень сомневаюсь в этом, и вы не можете представить какой-либо пример того, что вы пробовали до сих пор, и ваш вопрос не развился вообще с тех пор, как вы последний раз вывешенный.

EDIT

Причина «ничего не происходит», потому что вы не присвоить массив переменной.

Кроме того, вам нужно будет представить имена, используя массив, как-то, когда ваше представление связано с представлением записей.

+0

Эй, @fbelanger жаль, что вы не добавили много кратких ... Я отредактировал вопрос с вашим решением, пожалуйста, посмотрите ... –

+0

@Thatdude последнее обновление. – fbelanger

0

Вы можете сделать это путем поиска ваших строк запроса, чтобы увидеть, если включить ваше имя столбца, используя include? метод (https://ruby-doc.org/core-2.2.0/String.html#method-i-include-3F)

Тогда вы могли бы запустить LIKE поиск на вас DB, который может выглядеть несколько различных пути в зависимости от вашего БД (What's the best way to include a LIKE clause in a Rails query?)

Для дальнейшего использования @ fbelanger необходимо указать, что вы пробовали, предпочтительно включив пример кода (даже если он использует только поддельные вещи, например class Foo...).

Я бы также предложил подумать о других более удобных для пользователя вариантах, таких как предоставление выпадающего списка столбцов и поля поиска, чтобы ваши конечные пользователи могли понять, как взаимодействовать с формой поиска, и проще для вашего кода знать, какой столбец для поиска. (Просто предложение).

~ Удачи

+0

OP хочет вернуть данные из столбца, а не совпадающие записи. Если кто-то ставит «НАЗВАНИЕ» в поиске, все 'name's должны появиться. 'LIKE' предназначен для сопоставления строк на основе данных, а не от имени столбца. – fbelanger

+0

Ах да, неправильно прочитайте, что –

Смежные вопросы