Assume the following ActiveRecord::Base class:

class ArmyList < ActiveRecord::Base  
  belongs_to :game_system

  validates :name, :presence => true
  validates :points, :numericality => true
  validates :game_system, :presence => true

I was just pulling my hair out over this spec I was writing to make sure all my validations were working properly:

describe ArmyList do  
  it "should be valid" do => "Name", :points => 1500, :game_system => Factory(:game_system)).should be_valid

Changing it from the constructor method to the block method works however:

describe ArmyList do  
  it "should be valid" do do |al| = "Name"
      al.points = 1500
      al.game_system = Factory(:game_system)
    .should be_valid

Now that I've solved this problem it makes sense. The ActiveRecord::Base documentation for #new states

[...] valid attribute keys are determined by the column names of the associated table – hence you can’t have attributes that aren’t part of the table columns.

Because the column name is actually game_system_id it doesn't make sense that I'd be assigning game_system - an attribute that doesn't exist on the table - by using this form of the constructor.