質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2143閲覧

【Ruby on Rails】コントローラとルーティングに追加してるが、NoMethodError になる

pecchan

総合スコア555

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2017/04/06 08:44

編集2017/04/07 03:10

Win8.1 Rails 5.0.1 Ruby 2.3.3p222

表題の通りです。

コントローラにアクションを追加、
ルーティングにも追加してるんですが、
アクションを呼ぶとNoMethodErrorが表示されます。

何故でしょうか??

宜しくお願い致します。

●ルーティング

ruby

1Rails.application.routes.draw do 2 root 'products#index' 3 4 resources :products, only: [:index] do 5 collection do 6 get :search 7 end 8 end 9 10end 11

●コントローラ

ruby

1class ProductsController < ApplicationController 2 3 4 def index 5 @product = Search::Product.new 6 end 7 8 def search 9 @product = Search::Product.new(search_params) 10 @products = @product 11 .matches 12 .order(availability: :desc, code: :asc) 13 .decorate 14 end 15 16 17 def show 18 end 19 20 def new 21 @product = Product.new 22 end 23 24 def edit 25 end 26 27 private 28 29 30 # 検索フォームから受け取ったパラメータ 31 def search_params 32 params 33 .require(:search_product) 34 .permit(Search::Product::ATTRIBUTES) 35 end 36 37 38end 39

●呼出し側ビュー

Ruby

1<% content_for(:title) do %> 2 商品検索 3<% end %> 4 5<%= form_for(@product, url: search_products_path, html: { method: :get, class: 'form-horizontal', role: 'form' }) do |f| %> 6 <%= render 'search_form', f: f %> 7<% end %>

【エラー画像追加】
イメージ説明

【rake routes 画像追加】
イメージ説明

【モデル追加】
app\models\search\base.rb

Ruby

1class Search::Base 2 include ActiveModel::Model 3 include ActiveModel::Validations::Callbacks 4 5 def contains(arel_attribute, value) 6 arel_attribute.matches("%#{escape_like(value)}%") 7 end 8 9 def escape_like(string) 10 string.gsub(/[\\%_]/) { |m| "\\#{m}" } 11 end 12 13 def value_to_boolean(value) 14 ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value) 15 end 16end

app\models\search\Product.rb

Ruby

1class Search::Product < Search::Base 2 ATTRIBUTES = %i( 3 code 4 name name_kana 5 price_from price_to 6 purchase_cost_from purchase_cost_to 7 availability 8 ) 9 attr_accessor(*ATTRIBUTES) 10 11 def matches 12 t = ::Product.arel_table 13 results = ::Product.all 14 results = results.where(contains(t[:code], code)) if code.present? 15 results = results.where(contains(t[:name], name)) if name.present? 16 results = results.where(contains(t[:name_kana], name_kana)) if name_kana.present? 17 results = results.where(t[:price].gteq(price_from)) if price_from.present? 18 results = results.where(t[:price].lteq(price_to)) if price_to.present? 19 if purchase_cost_from.present? 20 results = results.where(t[:purchase_cost].gteq(purchase_cost_from)) 21 end 22 if purchase_cost_to.present? 23 results = results.where(t[:purchase_cost].lteq(purchase_cost_to)) 24 end 25 results = results.where(availability: true) if value_to_boolean(availability) 26 results 27 end 28end

app\models\product.rb

Ruby

1class Product < ApplicationRecord 2end 3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2017/04/06 09:12

NoMethodErrorはどの行で、何に対して発生していますか?
pecchan

2017/04/06 09:14

失礼しました。エラー画像を追加しました。
guest

回答1

0

ベストアンサー

ActiveModelを利用しているのですか?
Rails5からというか、ActiveModelはRailsのversionが変わるたびに
かなり大きく変更されています。
value_to_booleanはRails3までだったと思います。
Rails5ではmodel層に
value_to_boolean関連等、Databaseとのデータの置き換えの記述は全消しして
attribute :column, :boolean
attribute :column1, :integer
などと書くだけで、大丈夫だと思います。
もしよろしければProduct.rbを表示してください。

もし検索をすることが目的ならば、gem ransackをお勧めします。

投稿2017/04/07 02:56

編集2017/04/07 03:29
moke

総合スコア2241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moke

2017/04/07 03:36 編集

とりあえず、Railsで検索をしようと思ったらgem ransackを使うのが一番です。 標準ライブラリになって問題のない性能ですので。 ActiveModelはrails5になって、やっと仕様が安定した感じです。 Railsは後方互換性を鑑みない破壊的な変更がよくあるのでorz ただし劇的に効率化しますが…。
pecchan

2017/04/07 03:35

moke様 有難う御座います。 ransackというのを使ってみます! rails5になって、やっと仕様が安定したんですね(+_+;) 破壊的な変更・・・("゚д゚) Railsの勉強間もないですが、 Railsと付き合っていくのって荒馬に乗るかのような印象を受けました。 非常に強力なんですが扱いが難しい^^; 慣れるまでは・・・。
moke

2017/04/07 04:04 編集

rails2から3はかなり大変だったらしいです。 3から4,4から5は普通かな、許せる範囲です。 3から4は抜け道があったのですが、 抜け道を使った人は5になるときにツケを払うことに...。 まあ、基本、ごちゃごちゃ書いてたのが、リファクタリング感覚で直せるので そんなに苦痛ではないですし、過去のバージョンも保守されるので問題はないのですが…。 荒馬ですか…。 ある意味当たっている様な、違う様な…。 初心者でも、すぐにセキュアでそれなりものもが作れる且つ どこまでもカスタマイズ可能の二面性の代償ですかね 性格自体は気の利く優しいやつなんです…。 そう、日本人の様なorz
pecchan

2017/04/07 04:10

moke様 Railsの軌跡、参考になりました。 だいたいはリファクタリング感覚なんですね。 気の利く優しいやつ・・・・。 なんだかニンマリしました( *´艸`) 有難う御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問