18553


コードは主に以下になります。

こちらで、'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

[code]

    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
    
[/code]

controllers/members_controller.rb

[code]

      def search
        @tweet_form = TweetForm.new params[:tweet_form]
        @tweets = @tweet_form.search
        render :index
      end
    
[/code]

views/members/index.html.slim

[code]

    = form_for @tweet_form, url: search_path, method: :get do |f|
      .form-group
        = f.text_field :tweet
      = f.submit '検索', class: 'btn btn-primary'
    
[/code]

config/route.rb

[code]

      root_to: 'members#index'
      get '/:tweet_form' => 'members#search', as: 'search'
    
    
[/code]


CC BY-SA 3.0
2015-11-08T16:37:19.443
18551
2015-11-08T22:38:27.307
13175
question
ruby-on-rails ruby
railsで検索フォームを作っていたのですが、UrlGenerationErrorが出て、躓いております。

[code]

    get '/search' => 'members#search', as: 'search'
    
[/code]

のように書くと解決しそうな気がしますが、どうでしょうか？


CC BY-SA 3.0
2015-11-08T22:38:27.307
18553
2015-11-08T22:38:27.307
85
18551
answer