2012-10-02 79 views
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 

我做錯了什麼?

回答

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的一點點,進行下一個編碼會話之前。

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 

end