0

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

这是我的更新操作:

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

结尾

我做错了什么?

4

2 回答 2

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。

于 2012-10-02T09:46:44.043 回答
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

结尾

于 2012-10-02T09:48:37.970 回答