0

Player_ID、Season、Amount の 3 つの列を持つ主キーのないテーブルがあります。現在のテーブルを更新しようとすると、次のエラー メッセージが表示されます: ActiveRecord::StatementInvalid (Mysql2::Error: Unknown column 'salaries.' in 'where clause': UPDATE salariesSET Season= 20192, Amount= 3232.0 WHERE salaries.`` IS NULL)

コントローラーのメソッドを更新します。

def new
  @salary = Salary.new
  @players = Player.all
  @title = "Add salary"
end

def create
  @players = Player.all
  @salary = Salary.new(params[:salary])
  if @salary.save
    flash[:success] = "Successfully added salary"
    redirect_to salaries_path
  else
    @title = "Add salary"
    render 'new'
  end
end

def edit
  @player_id = params[:player_id]
  @season = params[:season]
  @salary = Salary.find_by_Player_ID_and_Season(params[:player_id], params[:season])
  @players = Player.all
  @title = "Edit salary"
end

def update
    @players = Player.all
    @player_id = params[:player_id]
    @season = params[:season]
    @salary = Salary.find_by_Player_ID_and_Season(params[:player_id], params[:season])
    if @salary.update_attributes(params[:salary])
       flash[:success] = "Successfully edited salary"
       redirect_to salaries_path
    else
       render 'edit'
    end
  end

_form.html.erb

<%= form_for(@salary, :url => salary_path(:player_id => @player_id, :season => @season)) do |f| %>
  <%= f.collection_select :Player_ID, @players, :ID, :Name %>
  <%= f.text_field :Season %>
  <%= f.text_field :Amount %>
  <%= f.submit "Add" %>
<% end %>
4

3 に答える 3

1

アクティブ レコード モデルには主キーが必要です。そうしないと、行を更新または削除できません。

composite_primary_keysテーブルに ID 列を追加したくない場合は、gem があります (ただし、主キーを追加することは確かに最も抵抗の少ない方法です)。

于 2012-10-07T15:22:00.207 に答える
0

あなたのテーブルにはすでに主キーがあります!それがid属性です。params[:season]...そうだと思いますよparams[:salary][:season]ね?小文字で書くべきだと思いますseason, player_id, amount。その後も問題が解決しない場合は、ここに新しいコードを投稿してください^^

于 2012-10-07T12:06:51.833 に答える
0

エラーの理由はわかっていますが、根本的な原因はすぐにはわかりません。失敗したクエリは次のとおりです。

ActiveRecord::StatementInvalid (Mysql2::Error: Unknown column 'salaries.' in 'where clause': UPDATE salaries SET Season = 20192, Amount = 3232.0 WHERE salaries.`` IS NULL)

重要な部分は次のとおりです。

WHERE salaries.`` IS NULL

WHERE salaries.foo IS NULLまたはの場合はある程度意味WHERE salaries.bar IS NULLがありますが、列名が通常ある場所に空のスペースがあるだけです。したがって、MySQL は (何らかの奇妙な理由で)存在しないsalaries(ie )という列について話していることを意味すると解釈していると思います。salaries.salaries

WHEREそもそもなぜその条項がそこにあるのかさえわかりません。

あなたのcreate行動はうまくいきますか?

更新:問題はほぼ確実に次の行です:

if @salary.update_attributes(params[:salary])

代わりにあなたが望むのは次のとおりだと思います:

if @salary.update_attributes(:amount => params[:amount])

それが何かをするかどうか見てください。

于 2012-10-07T12:38:06.710 に答える