首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >update_attributes中where子句的Rails错误

问update_attributes中where子句的Rails错误
EN

Stack Overflow用户
提问于 2012-10-07 19:44:54
回答 3查看 947关注 0票数 0

我有一个没有主键的表,有三列-- Player_ID、Season和Amount。当我想要更新当前的表时,我会收到这样的错误消息: ActiveRecord::StatementInvalid (Mysql2:: error : Unknown column 'salaries.‘在'where子句‘中: UPDATE salaries SET Season = 20192,Amount = 3232.0 WHERE salaries.为NULL)

我的控制器中的更新方法:

代码语言:javascript
复制
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

代码语言:javascript
复制
<%= 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 %>
EN

回答 3

Stack Overflow用户

发布于 2012-10-07 23:22:00

活动记录模型必须有一个主键,否则不能更新或删除行。

如果您确实不想向表中添加ID列,那么可以使用composite_primary_keys gem (尽管添加主键肯定是阻力最小的方法)

票数 1
EN

Stack Overflow用户

发布于 2012-10-07 20:06:52

您的表已经有主键!这是id属性。params[:season] ...我想是params[:salary][:season],对吧?我认为你应该用小写的season, player_id, amount写。之后,如果仍然有问题,请在此处发布新代码^^

票数 0
EN

Stack Overflow用户

发布于 2012-10-07 20:38:07

我知道你出错的原因,尽管根本原因我不是很清楚。失败的查询是这样的:

代码语言:javascript
复制
ActiveRecord::StatementInvalid (Mysql2::Error: Unknown column 'salaries.' in 'where clause': UPDATE salaries SET Season = 20192, Amount = 3232.0 WHERE salaries.`` IS NULL)

重要的部分是:

代码语言:javascript
复制
WHERE salaries.`` IS NULL

如果它是WHERE salaries.foo IS NULL或WHERE salaries.bar IS NULL,这会有一定的意义,但您只需要在列名通常所在的位置留出空格。因此,我猜MySQL (出于某种奇怪的原因)将其解释为您正在讨论一个名为salaries (即salaries.salaries)的列,但该列并不存在。

我甚至不知道为什么WHERE子句会放在第一位。

您的create操作有效吗?

更新:问题几乎可以肯定是这一行:

代码语言:javascript
复制
if @salary.update_attributes(params[:salary])

我相信你想要的是:

代码语言:javascript
复制
if @salary.update_attributes(:amount => params[:amount])

看看有没有什么用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12768530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档