scopeで検索フォーム作ったのですが、どうしてもフォームを1つにできなかったので質問させていただきました
現在はフォーム2つ用いて実装はできているのですが、これをやはり1つにしたいと思うのですが全くやり方がわかりません。
view
<div> <%= form_tag(orders_path, method: "get") do %> <%= text_field_tag :name, params[:name], :size => "37" %> <%= submit_tag "検索" %> <% end %> </div> <div> <%= form_tag(orders_path, method: "get") do %> <%= text_field_tag :address, params[:address], :size => "37" %> <%= submit_tag "検索" %> <% end %> </div>
orders_controller.rb
def index @orders = Order.paginate(:page => params[:page], :per_page => 10) respond_to do |format| format.html format.json { render json: @orders } end t = Order.arel_table address = params[:address] name = params[:name] @orders = @orders.where(t[:name].matches("%#{name}%")) if name.present? @orders = @orders.where(t[:address].matches("%#{address}%")) if address.present?
order.rbこちらはデフォルトscopeしか書いてませんが一応
class Order < ApplicationRecord PAYMENT_TYPES = ["現金","クレジットカード","注文書"] has_many :line_items, dependent: :destroy has_many :order_items, dependent: :destroy belongs_to :user validates :name, :address, :email,:user_id, presence: true validates :pay_type, inclusion: PAYMENT_TYPES default_scope -> { order(created_at: :desc) } def add_line_items_from_cart(cart) cart.line_items.each do |item| item.cart_id = nil line_items << item end end def total_price line_items.to_a.sum { |item| item.total_price } end def total_count line_items.to_a.sum { |item| item.quantity} end end
view/orders/indexにてtext_field_tag :name_or_addressなど試したのでがうまくいきませんでした。
以上です宜しくお願いしますm(._.)m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。