0

我有一個沒有主鍵的表格 - Player_ID,季節和金額。當我想更新我當前的表時我有這個錯誤消息:ActiveRecord :: StatementInvalid(Mysql2 ::錯誤:未知列'工資。'在'where子句'中:UPDATE salaries SET Season = 20192,Amount = 3232.0 WHERE salaries。 `IS NULL)update_attributes中的where子句導致Rails錯誤

更新方法在我的控制器:

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 %> 
+0

聽起來像是你的工資表沒有主鍵 –

+0

是的。 A沒有主鍵。我有三列 - Player_ID,季節和金額。我想在數據庫中編輯一些行。這是我的目標。 – user1107922

回答

0

你的表已經有主鍵!這是id屬性。 The params[:season] ...我認爲它是params[:salary][:season],對吧? 我覺得你應該寫下來season, player_id, amount。之後,如果問題仍然存在,請在這裏發佈新代碼^^

+0

我不確定我是否理解你。我有一個主鍵ID?爲什麼它應該是params [:salary] [:season]?因爲我的列是季節,Player_ID和金額,所以屬性不會寫成小寫。 「 – user1107922

+0

」也會添加一個名爲id的主鍵列,但由於這是默認值,所以我們不需要問這個問題。「看到這裏[鏈接](http://guides.rubyonrails.org/migrations。html) params [:salary] [:season]而不是params [:season]因爲薪水實例的形式。 – duykhoa

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 NULLWHERE salaries.bar IS NULL,但你還空空間,一列名字通常會是。所以我猜MySQL(出於某種奇怪的原因)正在解釋這意味着你正在討論一個名爲salaries(即salaries.salaries)的列,該列不存在。

我甚至不知道爲什麼WHERE條款是在那裏擺在首位。

您的create行動有效嗎?

更新:問題是幾乎可以肯定這條線:

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

我相信你想代替的是:

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

看看是否能做任何事情。

+0

在我的帖子中增加了新建,創建和編輯方法。我的創建方法有效,但我的表單在那裏不同。第一行只有<%= form_for(@salary)do | f | %> – user1107922

+0

好的,這是我的建議。首先,使'update'表單與'create'表單匹配。儘可能地簡化和簡化'update'操作,並使其工作。然後,一點一點地調整您的表單和控制器代碼以匹配您之前的內容。 –

+0

我在發佈這個問題之前做了很多次,但無法理解Where子句的問題。 where子句的語句應該是:「where salaries.player_id = player_id from url and salaries.season = url from url」 – user1107922

1

活動記錄模型必須具有主鍵或行不能更新或刪除。

有一個composite_primary_keys寶石,如果你真的不想要的ID列添加到您的表(雖然加入該主鍵肯定是阻力最小的路徑)

+0

'主鍵'是問題所在。對於'create table'遷移有一些問題。感謝你把這件事情.. :) – Swaps