我有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。
答案 0 :(得分:0)
此属性受到保护(rails 3),因此我需要在我的模型中将其列入白名单:
class App < ActiveRecord::Base
if defined?(ProtectedAttributes) || ::ActiveRecord::VERSION::MAJOR < 4
attr_accessible :name,
:require_manual_activation,
:live_build_id