我需要使用仅在控制器中工作的方法,但我无法实现更改属性。
以下是我的更新操作:
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
端
我做错了什么?
答案 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
端