Kodowanie w nowym Rails

Witam.

Na początku dodam, że jestem od kilku lat programistom PHP i przesiadka na Railsy jest dla mnie trochę… ciekawa;D W Railsach na poważnie piszę … 2 dzień :wink:

Postanowiłem w ramach treningu napisać sobie prostego CMS-a opartego o kilka komponentów, jednak już na samym początku, po przejściu z Railsów 2.2 na te 2.3.2 mam problem z kodowaniem w plikach.

Otóż to przy próbie edycji posta otrzymuję bardzo dziwny komunikat:

incompatible character encodings: UTF-8 and ASCII-8BIT

Dodam, że korzystam z bazy SQLite3.

Plik edit.html.erb wygląda tak:

[code]<% form_for :page, @page do |form| %>

Tytuł podstrony
<%= form.text_field :title, :value => @data[:title]%>
<% if @error %>
<%= @error[:title]%>
<% end %>
Treść podstrony
<%= form.text_area :text, :value => @data[:text] %>
<% if @error %>
<%= @error[:text] %>
<% end %>
<%= submit_tag 'Dalej' %>

<% end %>[/code]
Natomiast kontroller Admin::PageController:

[code]# -- coding: utf-8 --

class Admin::PageController < AdminController

def index
@pages = Page.find(:all, :order => ‘id desc’)
end

def edit
@data = Page.find(params[:id])

if @data == nil
  flash[:notice] = 'Brak takiej podstrony'
  
  redirect_to :action => 'index'
  return
end

if (params[:page])
  if not @data.update_attributes(params[:page])
    @error = @data.errors
  else
    flash[:notice] = 'Poprawnie zedytowano dane'
    
    redirect_to :action => 'index'
  end
end

end

def delete
if Page.delete(params[:id])
flash[:notice] = ‘Poprawnie usunięto’
end

redirect_to :action => 'index'

end

def new
@page = Page.new(params[:page])

if (params[:page])
  if not @page.valid? 
    @error = @page.errors
  else
    flash[:notice] = 'Poprawnie dodano wpis'
    @page.save
    
   redirect_to :action => 'index'
  end
  
end

end

end[/code]
Byłbym wdzięczny za pomoc,
Pozdrawiam :wink:

czesc
problem wynika z zastosowania ruby 1.9 lub nie uwzgledniles w pliku database.yml
sposobu zapisywania znakow w bazie, powinno byc:

development: adapter: sqlite3 encoding: utf8 ...
jezeli to nie pomoze to najlepiej zainstalowac wersje ruby 1.8.7 ktora jest zalecana dla railsow

cheers

Hej tusla,

Masz rację, problem wynikał z korzystania z Ruby w wersji 1.9. Po zaistalowaniu zalecanej wersji(1.8.7) problem zniknął.

Pozdrawiam.

sorki, nie widziałem tego:)

tusla! :slight_smile:

Już wspominałem o problemie, ale wyżalę się jeszcze raz ;-). Ustawianie kodowania w database.yml nic nie zmienia w tej sytuacji, bo sqlite3-ruby, pg (i prawdopodobnie cała reszta) zwraca wszystkie ciągi znaków z kodowaniem ASCII-8BIT. Dodatkowo zepsuty jest Rack 1.0 - wszystko co dostajemy np. w paramsach ma kodowanie ASCII-8BIT. Jakby komuś było mało, to w Railsowych template-ach również domyślnym kodowaniem jest ASCII-8BIT. Wszystko działa wyśmienicie, jeśli zarówno my jak i nasi klienci mówią w czystym US-ASCII i prawdopodobnie dlatego wraz z wydaniem aktualnej wersji RoR core developerzy (w większości z USA i UK) stwierdzili, że 2.3.2 jest kompatybilne z Ruby 1.9.1. Wymuszenie kodowania UTF-8 we wszystkich możliwych miejscach jest zadaniem żmudnym, dlatego najprostszym rozwiązaniem aby cieszyć się z RoR 2.3.2 na Ruby 1.9.1 jest używanie kodowania ASCII-8BIT wszędzie gdzie jest to możliwe (np. w I18n). Gdyby ktoś był tym zainteresowany to mogę spróbować napisać więcej na ten temat.

Ugh. Brzmi okrutnie i ciekawie, a ja znowu żałuję że jeszcze nie spróbowałem railsów z rubym 1.9. Jeśli możesz temat rozwinąć, to ja bardzo chętnie poczytam i/lub poklikam linki.