0

I need to use method, which is working only in controller, but I can't implement changing attribute.

Here is my update action:

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

end

What I'm doing wrong ?

Simone Carletti
  • 173,507
  • 49
  • 363
  • 364
MID
  • 1,815
  • 4
  • 29
  • 40

2 Answers2

1
@website.update_attributes(params[:website])

already performs the save to the database.

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

doesn't make any sense.

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

does. Also note the removal of quotes before request.env. Beware that you need to save again the changes, so it makes sense to move everything before the update attributes and use one single save call.

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

Last but not least, you might want to stop for a second and learn a little bit of Ruby syntax and ActiveRecord, before proceeding to the next coding session.

Simone Carletti
  • 173,507
  • 49
  • 363
  • 364
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

Denis Tataurov
  • 193
  • 2
  • 12