搜索时出错:全部

时间:2016-03-14 11:44:30

标签: ruby-on-rails ruby variables search textbox

我目前正在尝试创建搜索方法。我有一个数据库所有设置;但是,我遇到了错误:

ActiveRecord::RecordNotFound in ArticlesController#index

Couldn't find Article with 'id'=all

以下是相关代码:

Articles_controller.rb

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

    @articles = 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.find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
    else
        @article = Article.find(:all)
    end
    end

end

index.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>

很抱歉要查看所有代码。我得到的错误来自运行localhost:3000 / articles,我从服务器收到这些错误消息。我应该注意到我对Ruby和Ruby on Rails仍然是一个新手;然而,我的目标是学习并发现正确的代码可以帮助我(我是阅读障碍者并且往往是一个视觉学习者)。

我非常感谢你的帮助,谢谢你。

2 个答案:

答案 0 :(得分:1)

我认为发现不能:全部。 documentation

“使用find方法,您可以检索与任何提供的选项匹配的指定主键对应的对象。我认为这已经足够了

Article.where('name LIKE ?', "%#{search}%")

或者如果您找到所有文章

Article.all

答案 1 :(得分:0)

为什么索引方法中有@articles = Article.search(params[:id])

此外,堆栈跟踪将告诉您错误发生在哪一行