我有一个没有主键的表,有三列-- Player_ID、Season和Amount。当我想要更新当前的表时,我会收到这样的错误消息: ActiveRecord::StatementInvalid (Mysql2:: error : Unknown column 'salaries.‘在'where子句‘中: UPDATE salaries SET Season = 20192,Amount = 3232.0 WHERE salaries.为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 %>发布于 2012-10-07 23:22:00
活动记录模型必须有一个主键,否则不能更新或删除行。
如果您确实不想向表中添加ID列,那么可以使用composite_primary_keys gem (尽管添加主键肯定是阻力最小的方法)
发布于 2012-10-07 20:06:52
您的表已经有主键!这是id属性。params[:season] ...我想是params[:salary][:season],对吧?我认为你应该用小写的season, player_id, amount写。之后,如果仍然有问题,请在此处发布新代码^^
发布于 2012-10-07 20:38:07
我知道你出错的原因,尽管根本原因我不是很清楚。失败的查询是这样的:
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 (即salaries.salaries)的列,但该列并不存在。
我甚至不知道为什么WHERE子句会放在第一位。
您的create操作有效吗?
更新:问题几乎可以肯定是这一行:
if @salary.update_attributes(params[:salary])我相信你想要的是:
if @salary.update_attributes(:amount => params[:amount])看看有没有什么用。
https://stackoverflow.com/questions/12768530
复制相似问题