我目前正在尝试创建搜索方法。我有一个数据库所有设置;但是,我遇到了错误:
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仍然是一个新手;然而,我的目标是学习并发现正确的代码可以帮助我(我是阅读障碍者并且往往是一个视觉学习者)。
我非常感谢你的帮助,谢谢你。
答案 0 :(得分:1)
我认为发现不能:全部。 documentation说
“使用find方法,您可以检索与任何提供的选项匹配的指定主键对应的对象。我认为这已经足够了
Article.where('name LIKE ?', "%#{search}%")
或者如果您找到所有文章
Article.all
答案 1 :(得分:0)
为什么索引方法中有@articles = Article.search(params[:id])
?
此外,堆栈跟踪将告诉您错误发生在哪一行