前提・実現したいこと
大学の教科書販売サイトを作成しています。ユーザーがログインした時にそのユーザーのuniversity_idと出品者のuniversity_idが合致する商品のみ、商品一覧で表示したいです。
発生している問題
itemコントローラーのindexアクションの記述方法が分からない状態です。
該当のソースコード
app > controllers > item_controller.rb
ruby
1class ItemsController < ApplicationController 2 before_action :authenticate_user!, only: [:new, :create] 3 4 def index 5 @items = Item.order('created_at DESC') 6 end 7 8 def new 9 @item = Item.new 10 end 11 12 def create 13 @item = Item.new(item_params) 14 if @item.save 15 redirect_to root_path 16 else 17 render :new 18 end 19 end 20 21 private 22 def item_params 23 params.require(:item).permit(:name, :price, :year_period_id, :lecture, :teacher, :sales_status_id, :scheduled_delivery_id, :author, :publisher, :image).merge(user_id: current_user.id) 24 end 25end
app > models >user.rb
ruby
1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 7 extend ActiveHash::Associations::ActiveRecordExtensions 8 belongs_to :university 9 belongs_to :department 10 has_many :items 11 12 with_options presence: true do 13 validates :nickname 14 validates :birthday 15 16 with_options numericality: { other_than: 1, message: "を選択してください" } do 17 validates :university_id 18 validates :department_id 19 end 20 end 21 22 PASSWORD_REGEX = /\A(?=.*[a-zA-Z])(?=.*?\d)[a-zA-Z\d]+\z/i.freeze 23 validates_format_of :password, with: PASSWORD_REGEX, message: 'は半角英字と半角数字の両方を含めて設定してください' 24end
app > models >item.rb
ruby
1class Item < ApplicationRecord 2 extend ActiveHash::Associations::ActiveRecordExtensions 3 belongs_to :year_period 4 belongs_to :sales_status 5 belongs_to :scheduled_delivery 6 belongs_to :user 7 has_one_attached :image 8 9 with_options presence: true do 10 validates :image 11 validates :name 12 13 with_options numericality: { greater_than: 0,allow_blank: true }, format: { with: /\A[0-9]+\z/,allow_blank: true } do 14 validates :price 15 end 16 17 with_options format: { with: /\A[ぁ-んァ-ン一-龥0-9]+\z/, allow_blank: true } do 18 validates :lecture 19 validates :teacher 20 validates :author 21 validates :publisher 22 end 23 24 with_options numericality: { other_than: 1, message: "を選択してください"} do 25 validates :year_period_id 26 validates :sales_status_id 27 validates :scheduled_delivery_id 28 end 29 end 30end
db > migrate > 20210708035000_devise_create_users.rb
ruby
1# frozen_string_literal: true 2 3class DeviseCreateUsers < ActiveRecord::Migration[6.0] 4 def change 5 create_table :users do |t| 6 ## Database authenticatable 7 t.string :nickname, null: false 8 t.string :email, null: false, default: "" 9 t.string :encrypted_password, null: false, default: "" 10 t.integer :university_id, null: false 11 t.integer :department_id, null: false 12 t.date :birthday, null: false 13 14省略
db > migrate > 20210713000013_create_items.rb
ruby
1class CreateItems < ActiveRecord::Migration[6.0] 2 def change 3 create_table :items do |t| 4 t.string :name, null: false 5 t.integer :price, null: false 6 t.integer :year_period_id, null: false 7 t.string :lecture, null: false 8 t.string :teacher, null: false 9 t.integer :sales_status_id, null: false 10 t.integer :scheduled_delivery_id, null: false 11 t.string :author, null: false 12 t.string :publisher, null: false 13 t.references :user, null: false, foreign_key: true 14 t.timestamps 15 end 16 end 17end
試したこと
itemコントローラーのindexアクションにwhereを使用したのですが、itemテーブルにuniversity_idがない場合の書き方が分からずにいます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。