Ruby on rails 更新_属性中where子句出现Rails错误

Ruby on rails 更新_属性中where子句出现Rails错误,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Ruby On Rails 3.2,我有一个没有主键的表,有三列——球员ID、赛季和金额。当我想更新我的当前表时,我有以下错误消息:ActiveRecord::StatementInvalid(Mysql2::error:未知列'salaries.'in'where子句':updatesalariesSETseasure=20192,Amount=3232.0其中salaries``为空) 我的控制器中的更新方法: def new @salary = Salary.new @players = Player.all @

我有一个没有主键的表,有三列——球员ID、赛季和金额。当我想更新我的当前表时,我有以下错误消息:ActiveRecord::StatementInvalid(Mysql2::error:未知列'salaries.'in'where子句':update
salaries
SET
seasure
=20192,
Amount
=3232.0其中
salaries
``为空)

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

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 %>
salary_path(:player_id=>@player_id,:seasure=>@seasure))do|f|%>

您的表已经有主键了!这是
id
属性。
参数[:季节]
。。。我想这是一个参数[:薪水][:季节],对吗?
我想你应该写下赛季,球员id,金额。之后,如果仍然有问题,请在此处发布新代码^ ^

我知道错误的原因,尽管我还不清楚根本原因。您失败的查询是:

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
如果它是
其中salaries.foo为NULL
其中salaries.bar为NULL
,则会有一定的意义,但在通常情况下,列名的位置只有空白。所以我猜MySQL(出于某种奇怪的原因)将其解释为意味着您正在谈论一个名为
salaries
(即
salaries.salaries
)的专栏,它并不存在

我甚至不知道为什么
WHERE
子句首先在那里

您的
创建
操作有效吗

更新:问题几乎肯定在于这一行:

if @salary.update_attributes(params[:salary])
我相信你想要的是:

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

看看这是否有用。

活动记录模型必须具有主键,否则无法更新或删除行


如果您真的不想在表中添加ID列(尽管添加该主键肯定是阻力最小的路径),那么就有一个
复合主键
gem

我不确定是否理解您的意思。我如何拥有主键id?为什么应该是params[:salary][:seash]?属性不写在downcase中,因为我的列是季节、球员ID和金额。“也会添加一个名为ID的主键列,但是由于这是默认值,我们不需要要求它。”请参见此处的参数[:salary][:seasure]而不是参数[:seasure],因为薪资实例的表单。在我的帖子中添加了新的,创建和编辑方法。我的create方法有效,但我的表单在那里有所不同。第一排没问题,这是我的建议。首先,使
update
表单与
create
表单匹配。使
update
操作尽可能简单明了,并使其正常工作。然后,一点一点地调整表单和控制器代码,使之与最初的目标相匹配。在发布此问题之前,我做了很多次,但不明白where子句的问题出在哪里。where子句的语句应该是:“where salaries.player_id=player_id from url和salaries.seasure=seasure from url”如果我从_form.html中删除:url=>salary_path(:player_id=>@player_id,:seasure=>@seasure),我有一条错误消息:“未定义的方法‘join’for nil:NilClass”你给我们看的这个控制器是
app/controllers/salaries\u controller.rb
,对吗?听起来你的工资表没有主键是的,是的。A没有主键。我有三栏-球员ID、赛季和数量。我想编辑数据库中的一些行。这是我的目标。
主键
是问题所在。在
create table
迁移中遇到一些问题。谢谢你提起这件事……)