我目前在Ruby on Rails中有一个数据库,但是,除了列出数据库中的所有项目之外,我一直遇到有关如何做更多事情的文档的问题。作为一个整体来说,我仍然对这种语言不熟悉,并希望我不需要寻求这么多的帮助,但现在就这样了。我的相关代码如下:
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>
提前感谢您的帮助!
答案 0 :(得分: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
现在,类方法执行搜索,将集合返回给控制器,控制器将它们分配给实例变量以供在视图中使用。
答案 1 :(得分:0)
您已获得搜索表单,请确保这是一个GET。好。当您点击搜索时,您会在开发日志中注意到articles#index
有点击,浏览器会显示与之前相同的内容。要使搜索内容编辑文章控制器中的index
方法。
def index
@articles = Article.all.search(params[:search])
end
在Article.search
name
,您应该有一个title
。
PS:你的show
方法有点不对。