railsで検索フォームを作っていたのですが、UrlGenerationErrorが出て、躓いております。
コードは主に以下になります。
こちらで、'members#index'にアクセスした時点でエラーが出ております。
No route matches {:action=>"search", :controller=>"members"} missing required keys: [:tweet_form]
ルーティングがおかしいのだということはわかるのですが、
それに対し、どのように修正したら良いのかがわかりません。
route.rbのコードを一時的に以下のようにして試し
get '/' => 'members#search', as: 'search'
検索ボタンを押下すると、以下のようなurlが発行されました。
search?utf8=✓&tweet_form%5Btweet%5D=ほげ&commit=検索
このようなルーティングを設定するにはどうすればよいか途方に暮れております・・・。
(「ほげ」が検索ワードです。)
宜しければ、ご指摘願えないでしょうか?
※検索用のgemもありますが、今回はgem抜きで実装したく思っております。
app/models/tweet_form.rb
class TweetForm include Virtus extend ActiveModel::Naming include ActiveModel::Conversion include ActiveModel::Validations attribute :tweet, String #これがないとエラーが出る。 #undefined method `persisted? def persisted? ; false ; end def search scoped = Tweet.all scoped = Tweet.where("tweet LIKE ?", "%#{tweet}%") if tweet.present? scoped end end
controllers/members_controller.rb
def search @tweet_form = TweetForm.new params[:tweet_form] @tweets = @tweet_form.search render :index end
views/members/index.html.slim
= form_for @tweet_form, url: search_path, method: :get do |f| .form-group = f.text_field :tweet = f.submit '検索', class: 'btn btn-primary'
config/route.rb
root_to: 'members#index' get '/:tweet_form' => 'members#search', as: 'search'