Ruby on rails 3.2 Rails属于关联在视图中返回nil

Ruby on rails 3.2 Rails属于关联在视图中返回nil,ruby-on-rails-3.2,Ruby On Rails 3.2,我是ruby和rails的新手,已经为这个问题挣扎了几天。我已经在寻找答案,但找不到解决办法 我在游戏、票务和玩家之间建立了一种多对多的联系,这种联系是通过协会实现的。相关的关联声明可以如下所示: class Game < ActiveRecord::Base has_many :tickers, :dependent => :destroy has_many :players, :through => :tickers end class T

我是ruby和rails的新手,已经为这个问题挣扎了几天。我已经在寻找答案,但找不到解决办法

我在游戏、票务和玩家之间建立了一种多对多的联系,这种联系是通过协会实现的。相关的关联声明可以如下所示:

class Game < ActiveRecord::Base        
    has_many :tickers, :dependent => :destroy
    has_many :players, :through => :tickers
end

class Ticker < ActiveRecord::Base
    belongs_to :games
    belongs_to :players
end

class Player < ActiveRecord::Base
    has_many :tickers, :dependent => :destroy
    has_many :games, :through => :tickers
end
我的数据库架构:

  create_table "games", :force => true do |t|
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "players", :force => true do |t|
    t.string "player_name"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "tickers", :force => true do |t|
    t.integer "activity_id"
    t.integer "player_id"
    t.integer "time"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.integer "game_id"
  end
以下是我如何创建一个新的ticker实例(目前):

app/views/games/show.html.erb:

<p id="notice"><%= notice %></p>

<p>
  <b>Home:</b>
  <%= @game.home_team.team_name %>
</p>

<p>
  <b>Away:</b>
  <%= @game.away_team.team_name %>
</p>

<table>
  <tr>
    <th>Activity</th>
    <th>Player</th>
    <th>Time</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @tickers.each do |ticker| %>
  <tr>
    <td><%= ticker.activity_id %></td>
    <td><%= ticker.players.player_name %></td>
    <td><%= ticker.time %></td>
    <td><%= link_to 'Show', ticker %></td>
    <td><%= link_to 'Edit', edit_ticker_path(ticker) %></td>
    <td><%= link_to 'Destroy', ticker, confirm: 'Are you sure?', method: :delete %>     </td>
  </tr>
<% end %>
</table>
<%= link_to 'New Ticker', new_ticker_path(:game_id=>@game.id) %>

所属的应为单数。即

belongs_to :game #u have specified 'games'

所属的应为单数。即

belongs_to :game #u have specified 'games'

是 啊就这样。但你能给我解释一下,为什么它是单数的,而在另一种情况下是复数的?因为一个物体总是属于“一个”父母而不是许多父母,并且有“一个或多个”孩子。如果你仍然希望现有代码正常工作,那么你可以在类中添加名为“games”和“players”的方法,并使用它们的id获取“parent”,但从长远来看这没有意义。我无法升级投票。“投票需要15个声望”——我没有:(是的。就是这样。但你能解释一下,为什么它是单数的,在另一种情况下是复数的吗?因为一个对象总是属于“一个”父对象,而不是多个,并且有“一个或多个”子对象。如果你仍然希望现有代码正常工作,那么你可以在类中添加名为“games”和“players”的方法,并使用它们的id获取“父对象”,但不需要从长远来看是没有意义的。我不能提高投票率。“提高投票率需要15个声誉”-我没有-:(
  create_table "games", :force => true do |t|
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "players", :force => true do |t|
    t.string "player_name"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "tickers", :force => true do |t|
    t.integer "activity_id"
    t.integer "player_id"
    t.integer "time"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.integer "game_id"
  end
<%= link_to 'New Ticker', new_ticker_path(:game_id=>@game.id) %>
<%= form_for(@ticker) do |f| %>
  <% if @ticker.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@ticker.errors.count, "error") %> prohibited this ticker from being saved:</h2>

      <ul>
      <% @ticker.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.hidden_field :game_id, :value => params[:game_id] %>
  </div>
  <div class="field">
    <%= f.label :activity_id %><br />
    <%= f.number_field :activity_id %>
  </div>
  <div class="field">
    <%= f.label :player_id %><br />
    <%= f.number_field :player_id %>
  </div>
  <div class="field">
    <%= f.label :time %><br />
    <%= f.number_field :time %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
  def new
    @ticker = Ticker.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @ticker }
    end
  end

  def create
    @ticker = Ticker.new(params[:ticker])

    respond_to do |format|
      if @ticker.save
        format.html { redirect_to @ticker, notice: 'Ticker was successfully created.' }
        format.json { render json: @ticker, status: :created, location: @ticker }
      else
        format.html { render action: "new" }
        format.json { render json: @ticker.errors, status: :unprocessable_entity }
      end
    end
  end
belongs_to :game #u have specified 'games'