我正在一个非常基本的实践应用程序上工作,用户可以在其中创建多个报价。我遇到的问题是我无法更新报价。我有很多事情,并且在这里和Google上都读过其他问题,但无法弄清楚我在做什么错。这是我的代码:

#User Model
    class User < ActiveRecord::Base
      has_many :quotations, :dependent => :destroy
      attr_accessible :quotations
      accepts_nested_attributes_for :quotations, :allow_destroy => true
    end

#Quotations Model
class Quotation < ActiveRecord::Base
  attr_accessible :quote_text, :author, :quote_type, :category, :tags, :user_id
  belongs_to :user
end


报价控制器

class QuotationsController < ApplicationController
  before_filter :get_user

  def get_user
    @user = User.find(params[:user_id])
  end

  def edit
    @quotation = @user.quotations.find(params[:id])
  end

  def update
    @quotation = @user.quotations.find(params[:id])
    if @quotation.update_attributes(params[:id])
      redirect_to user_quotation_path :notice  => "Successfully updated quotation."
    else
      render :action => 'edit'
    end
  end

end

最佳答案

您将错误的params哈希传递给update_attributes调用。它应该是

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

要澄清的是,传递:id:quotation并没有做任何特殊的事情。 Symbols in Ruby are just immutable string。因此,使用:id:quotation等同于传递字符串“ id”或“ quotation”。 params[]是页面发布的所有表单参数的哈希图。

在params哈希中,有一个您要传递的键(在本例中为quotation),该键的另一个哈希值包含与视图中的报价相关联的所有已发布字段以及这些字段的值。

params哈希中的ID,控制器和操作值来自url的路由值。

例如。

params[] =
{
      :controller => 'quotations',
      :action => 'edit',
      :id => '1',
      :quotation =>
      {
          :quote_text=> "Blah",
          :author=> "Steve",
          :quote_type=> "1",
          :user_id=> "6"
      }
}

09-25 22:28