Rails 3 update_attributes不适用于相关的模型ID

时间:2015-01-30 13:51:29

标签: ruby-on-rails ruby-on-rails-3.2

我有App has_one: live_build。在update方法中,我遇到了Rails 3.2中的一个问题。

以下是方法:

if @app.update_attributes(update_params)

  respond_with_json(
    { app: @app.serialize },
    location: nil
  )
else
  respond_with_json(
    { errors: @app.errors },
    status: :unprocessable_entity
  )
end

这是一个需要在Rails 4和R3中工作的gem。一切都在4中工作,但在3.2中,这不会更新live_build_id。我在控制台中验证了

@app.update_attributes('live_build_id' => 3)

不起作用。唯一有效的是@app.live_build_id = 3@app.live_build = [instance]

更新

update_params行实际上是

if @app.update_attributes( use_params(:app_update_params) )
  ..

控制器还有两种方法

def app_update_params_rails_3
  params[:app].slice(
    :name,
    :require_manual_activation,
    :live_build_id
  )
end

def app_update_params_rails_4
  params.require(:app).permit(
    :name,
    :require_manual_activation,
    :live_build_id
  )
end

并继承自ApplicationController,具有此方法

def use_params(param_method)
  v = Rails::VERSION::MAJOR
  send("#{param_method}_rails_#{v}")
end

这就是宝石适用于Rails 3和4。

1 个答案:

答案 0 :(得分:0)

此属性受到保护(rails 3),因此我需要在我的模型中将其列入白名单:

class App < ActiveRecord::Base
  if defined?(ProtectedAttributes) || ::ActiveRecord::VERSION::MAJOR < 4
    attr_accessible :name,
                    :require_manual_activation,
                    :live_build_id
相关问题