2016-03-14 171 views
0

我目前在Ruby on Rails中有一個數據庫,但是,我一直在關於如何做其他事情的文檔上遇到問題,而不是列出數據庫中的所有項目。我對整個這種語言還是陌生的,並且希望我不需要這麼多的幫助,但是在這裏它就是這樣。我的相關代碼如下:在Ruby on Rails中搜索字段DB

migrate/(DB name)

class CreateArticles < ActiveRecord::Migration 
    def change 
    create_table :articles do |t| 
     t.string :title 
     t.text :text 

     t.timestamps null: false 
    end 
    end 
end 

articles_controller.rb

class ArticlesController < ApplicationController 
    def index 
    @articles = Article.all 

    Article.search(params[:id]) 
    end 

    def show 
    @article = Article.find(params[:search]) 
    end 

    def new 
    @article = Article.new 
    end 

    def edit 
    @article = Article.find(params[:id]) 
    end 

    def create 
    @article = Article.new(params.require(:article).permit(:title, :text)) 

    if @article.save 
     redirect_to @article 
    else 
     render 'new' 
    end 
    end 

    def update 
    @article = Article.find(params[:id]) 

    if @article.update(article_params) 
     redirect_to @article 
    else 
     render 'edit' 
    end 
    end 

    def destroy 
    @article = Article.find(params[:id]) 
    @article.destroy 

    redirect_to articles_path 
    end 

    private 
    def article_params 
     params.require(:article).permit(:title, :text) 
    end 
end 

article.rb

class Article < ActiveRecord::Base 

    validates :title, presence: true, 
        length: { minimum: 5 } 

    def self.search(search) 
    if search 
     @article = Article.where('name LIKE ?', "%#{search}%") 
    else 
     @article = Article.all 
    end 
    end 

end 

index.html.rb

<h1>Listing articles</h1> 

<%= link_to 'New article', new_article_path %> 

<table> 
    <tr> 
    <th>Title</th> 
    <th>Text</th> 
    <th colspan="3"></th> 
    </tr> 

    <% @articles.each do |article| %> 
    <tr> 
     <td><%= article.title %></td> 
     <td><%= article.text %></td> 
     <td><%= link_to 'Show', article_path(article) %></td> 
     <td><%= link_to 'Edit', edit_article_path(article) %></td> 
     <td><%= link_to 'Destroy', article_path(article), 
       method: :delete, 
       data: { confirm: 'Are you sure?' } %></td> 
    </tr> 
    <% end %> 


    <%= form_tag articles_path, :method => 'get' do %> 
    <p> 
     <%= text_field_tag :search, params[:search] %> 
     <%= submit_tag "Search", :name => nil %> 
    </p> 
<% end %> 

</table> 

感謝您提前提供任何幫助!

回答

1

本質上你的問題是你試圖在模型中的類方法中設置控制器實例變量。

class ArticlesController < ApplicationController 
    def index 
    @articles = Article.search(params[:search]) 
    end 
end 

article.rb

class Article < ActiveRecord::Base 

    validates :title, presence: true, 
        length: { minimum: 5 } 

    def self.search(search) 
    if search.present? 
     Article.where('title LIKE ?', "%#{search}%") 
    else 
     Article.all 
    end 
    end  
end 

所以,現在的類的方法進行搜索,收集返回到它們分配給一個實例變量對於在視圖使用該控制器。

+0

ha,你錯過了「名稱」;) –

+0

真的,剛從OP的問題 –

+0

複製出來,現在我收到了'參數:{「search」=>「asd」,「utf8」=>「✓」 } 文章加載(0.5ms)選擇「文章」。*從後端的「文章」'在前端沒有變化 –

0

你有你的搜索表單,確保這是一個GET。好。當您點擊搜索時,您會注意到您的開發日誌中存在articles#index,並且瀏覽器將顯示與以前相同的內容。要使搜索內容在文章控制器中編輯index方法。

def index 
    @articles = Article.all.search(params[:search]) 
end 

Article.search你有一個name,你應該有一個title

PS:你有show方法有點不對。

+0

謝謝,不好看看秀,但是在搜索方面,在後臺我還是沒有看到調用時選擇正確的''參數:{「search」=>「asd」,「utf8」=>「✓」} 文章載入(0.1ms)SELECT「articles」。* FROM「articles」'是什麼我從後臺收到 –

+0

嗯,可能是'Article.search(params [:搜索])'然後像j-dexx建議的那樣。我的mongoid對「.all」沒有太多打擾。 –

+0

不,它仍然看到搜索,但只運行'SELECT「條目。* FROM」articles「 –