如何在更新操作中更改对象属性?

时间:2012-10-02 09:38:57

标签: ruby-on-rails ruby actioncontroller

我需要使用仅在控制器中工作的方法,但我无法实现更改属性。

以下是我的更新操作:

def update
@website = Website.find(params[:id])
respond_to do |format|
 if @website.update_attributes(params[:website]) 
  if params[:website][:language] == "Auto"
    @website.[:website][:language] =  full_language("request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first")
  end

    format.html { redirect_to @website, notice: 'website was successfully updated.' }
    format.js
  else
    format.html { render action: "edit" }
    format.js { render action: "edit" }
  end
end

我做错了什么?

2 个答案:

答案 0 :(得分:1)

@website.update_attributes(params[:website])

已经执行了保存到数据库。

@website.[:website][:language] =  full_language("request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first")

没有任何意义。

@website.language = full_language(request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first)

一样。另请注意删除request.env之前的引号。请注意,您需要再次保存更改,因此在更新属性之前移动所有内容并使用一个保存调用是有意义的。

def update
  @website = Website.find(params[:id])
  @website.attributes = params[:website]

  if params[:website][:language] == "Auto"
    @website.language = full_language(request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first)
  end

  respond_to do |format|
   if @website.save
    format.html { redirect_to @website, notice: 'website was successfully updated.' }
    format.js
  else
    format.html { render action: "edit" }
    format.js { render action: "edit" }
  end
end

最后但并非最不重要的一点是,您可能希望在继续下一个编码会话之前停下来学习一点Ruby语法和ActiveRecord。

答案 1 :(得分:0)

def update
  @website = Website.find(params[:id])
  if params[:website][:language] == "Auto"
    params[:website][:language] = full_language("request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first")
  respond_to do |format|
  if @website.update_attributes(params[:website]) 
    format.html { redirect_to @website, notice: 'website was successfully updated.' }
    format.js
  else
    format.html { render action: "edit" }
    format.js { render action: "edit" }
  end
end