我有两个模型,一个游戏模型和一个平台模型。
在我的游戏桌中,我有一个名为platform_id
的列 - 在我的平台表格中,我有一个名为system
的列
我尝试使用<%= @game.platform_id.system %>
让系统显示在视图中 - 但它不起作用..我做错了什么?提前谢谢!
我的模特
class Game < ActiveRecord::Base
has_many :platforms
has_one :genre
end
class Platform < ActiveRecord::Base
belongs_to :game
end
游戏桌
create_table "games", force: :cascade do |t|
t.string "title"
t.string "image"
t.date "release_date"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "platform_id"
t.integer "genre_id"
end
平台表
create_table "platforms", force: :cascade do |t|
t.string "system"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
游戏控制器
class GamesController < ApplicationController
before_action :authenticate_user!
before_action :set_game, only: [:show, :edit, :update, :destroy]
def index
@games = Game.all
end
def show
@reviews = Review.where(game_id: @game.id)
@previews = Preview.where(game_id: @game.id)
@news = News.where(game_id: @game.id)
end
def create
@game = Game.new(game_params)
@game.save
redirect_to @game
end
def new
@game = Game.new
set_platforms
set_genres
end
def edit
set_platforms
set_genres
end
def update
@game.update(game_params)
@game.save
redirect_to @game
end
def destroy
@game.destroy
redirect_to root_path
end
private
def game_params
params.require(:game).permit(:title, :image, :release_date, :genre_id, :platform_id)
end
def set_game
@game = Game.find(params[:id])
end
def set_platforms
@platforms = Platform.order(:system)
@platform = Platform.find(params[:id])
end
def set_genres
@genres = Genre.order(:category)
end
end
答案 0 :(得分:1)
你设计错了。如果你说Platform
模型belongs_to
Game
模型,则表示数据库中的platforms
表应该有一个名为game_id
的列,它应该存储它所属游戏的id
。
但你没有这样做。您已将该列放在Game
模型中,这就是您的关联永远不会起作用的原因。
此外,<%= @game.platform_id.system %>
做任何事情都没有做到。 Rails为您提供了通过使用关联从另一个模型获取模型的选项。
<%= @platform.game %> # It makes perfect sense. Since a platform belongs_to a game