关联 - 在视图中显示名称而不是ID?

时间:2015-07-09 08:09:06

标签: ruby-on-rails

我有两个模型,一个游戏模型和一个平台模型。

在我的游戏桌中,我有一个名为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

1 个答案:

答案 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