ここで何か不足している可能性があります。私はここでレールキャストに従っています。簡単な検索がレールアプリで機能していない
私はモデルname
カラムと呼ばれるモデルを持っています。私のコントローラで
私は次のように検索するための新しい方法を追加しました:
productions_controller.rb
def index
@productions =Production.all
end
def search
if params[:search]
@productions = Production.find(:all, :conditions => ['name LIKE ?', "%#{params[:search]}%"])
else
@productions = Production.all
end
end
をそして私は、ルートファイルでこのアクションを追加しました:
resources :productions do
collection do
get 'search'
end
end
私は検索フィールドを与えましたindex.html.erb
私が検索したときに<%= form_tag productions_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
そして私は今、検索アクション
search.html.erb
<table>
<thead>
<tr>
<th>Name</th>
<th>Director</th>
<th>Status</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @productions.each do |production| %>
<tr>
<td><%= production.name %></td>
<td><%= production.director %></td>
<td><%= production.status %></td>
<td><%= link_to 'Show', production %></td>
<td><%= link_to 'Edit', edit_production_path(production) %></td>
<td><%= link_to 'Destroy', production, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
制作テーブル
create_table "productions", force: :cascade do |t|
t.string "name"
t.string "director"
t.integer "status"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
のための上陸を作成しました名前の表のキーワード私はすべてのthを得ているeの名前は、たとえ入力されたキーワードにも近くない場合でも、テーブル内に存在します。
あなたは提案のように、私はindexアクションでこれを追加しました。さて、** productionsで 'name'という列があると思っていました**このエラーはSQLite3 :: SQLException:no such column:production.name:SELECT" productions "です。 '%avatar%'のような名前) ' – user3576036
@ user3576036申し訳ありませんが、私の間違いは、あなたのテーブル名は複数の「制作物」です。やってみよう。 –
これは動作しています。しかし、インデックスメソッドの代わりに私は別のメソッドでそれをしたい。だからこそ私は 'search'という新しいメソッドを作成し、それをルートに追加しました。なぜそれが 'search'メソッドと連動しないのですか?そして、 'index'メソッドの代わりに' search'メソッドからどのように動作させることができますか? – user3576036