1

Heroku にデプロイする Rails アプリケーションに問題があります。Club リソースで POST を実行すると、次のように表示されます。

Parameters: {"utf8"=>"✓","authenticity_token"=>"MqScpac6l9MMHdPBehqfq0mTwLCCZq2dlZLVY6wt+ow=", 
"club"=>    {"name"=>"Grün Weiß Club im PSV Kiel"}, "commit"=>"absenden"}
2012-12-31T03:10:49+00:00 app[web.1]: NoMethodError (undefined method `user_id=' for #  <Club:0x000000061269b0>):
2012-12-31T03:10:49+00:00 app[web.1]: 
2012-12-31T03:10:49+00:00 app[web.1]: 
2012-12-31T03:10:49+00:00 app[web.1]:   app/controllers/clubs_controller.rb:47:in `create'

私のモデルは次のようになります。

class Club < ActiveRecord::Base
  default_scope :order => 'name ASC'
  attr_accessible :name, :user_id
  belongs_to :user
  has_many :memberships
  has_many :users, :through => :memberships, :order => 'name ASC'
  validates :name, presence: true, :uniqueness => true
end

コントローラーは次のようなアクションを作成します。

def create
  @club = Club.new(params[:club])
  @club.user_id = current_user.id
  respond_to do |format|
    if @club.save
      format.html { redirect_to @club, notice: 'Club was successfully created.' }
      format.json { render json: @club, status: :created, location: @club }
    else
      format.html { render action: "new" }
      format.json { render json: @club.errors, status: :unprocessable_entity }
    end
  end
end 

認証は Devise gem によって行われます。さらに混乱するのは、heroku で rails コンソールを実行すると、次のように表示されることです。

irb(main):001:0> Club
=> Club(id: integer, name: string, created_at: datetime, updated_at: datetime, user_id: integer)

したがって、DBでさえ正しいはずです。ご協力いただきありがとうございます!

4

1 に答える 1

0

コントローラーでこれを試して、動作するかどうかを確認してください。

@club = current_user.clubs.build params[:club]

それ以外の

@club = Club.new(params[:club])
@club.user_id = current_user.id

Userが含まれていることを確認してください。has_many :clubsそうすれば、取り除くことができますattr_accessible :user_id

于 2012-12-31T06:41:21.493 に答える