2013-12-15 52 views
1

我正在製作一個Rails 4應用程序,這是一個博客,我希望能夠在網站上搜索帖子的標題。我使用find方法來「搜索」帖子的標題和show方法以顯示結果。無論如何,都沒有找到顯示。使用Rails 4進行搜索時出現問題?

def find 
    @params = params[:post] 
    title = @params[:title] 
    @post = Post.find_by_title(@params[:title]) 
    respond_to do |format| 
    if @title != nil 
    format.html {render :action => :show} 
    else 
    format.html { render :action => :not_found } 
    end 
end 
end 



def show 
id = params[:item][:id] 
    @post = Post.find_by_title(@params[:title]) 


respond_to do |format| 
    if @post != nil 
    format.html 
    else 
    format.html{render :action => "not_found"} 
    end 
end 
end 

下面是關於搜索

<h2>Find a post</h2> 
<h3><%= form_for :post, :url => {:action => :find} do |form| %> 
<p><label for="title">Name:</label> 
<%= form.text_field :title, :size => 20 %></p> 
<p><%= submit_tag "Find a Post" %></p></h3> 
<% end %> 
+0

附註:您的解決方案只能找到完全匹配。如果你想要更多的點擊,你可以使用'Post.where'標題,比如'','%#{@ params [:title]}%「' – froderik

回答

1

的HTML「未找到」顯示,因爲您的if @title != nil總是要失敗,因爲@title永遠是零,你還沒有定義它。

你需要做的:

def find 
    @params = params[:post] 
    @title = @params[:title] # <--------- here set `title` to `@title` 
    @post = Post.find_by_title(@params[:title]) 
    respond_to do |format| 
    if @title != nil 
    format.html {render :action => :show} 
    else 
    format.html { render :action => :not_found } 
    end 
end 
end 

還要注意的是動態查找,如find_by_title Rails中4已被棄用,您應該where替換它們。例如對於@post = Post.find_by_title(@params[:title])你會寫@post = Post.where(title: @params[:title])

0

此外,出於好奇,如果你允許我:在你的show方法中,你似乎在params中有ID。你爲什麼不直接通過它的ID檢索對象,使用@post = Post.find(params[:title][:id])?對不請自來的小費=]