Ruby or Rails bug?

In irb all works fine:

# irb irb(main):001:0> require 'rubygems' => true irb(main):002:0> require 'raspell' => true irb(main):003:0> speller = Aspell.new("ru_RU") => #<Aspell:0x7f8692c9d158> irb(main):004:0> speller.suggestion_mode = Aspell::NORMAL => "normal" irb(main):005:0> speller.check("лошадь") => true

But same in Rails project:

require 'rubygems' require 'raspell'

def xxx   speller = Aspell.new("ru_RU")   speller.suggestion_mode = Aspell::NORMAL   @xxx = speller.check("лошадь").to_s end

@xxx is false! Why?

In Ruby, when one tries to access an instance variable directly, which is always private by default, the return value is nil until it has been properly initialized. You can access instance variables using an accessor on a class. In any case, I recommend that you get a copy of “Programming Ruby” or “Programming Ruby 1.9” and read the section on “Scope of Constant and Variables”.

Good luck,

-Conrad

require 'rubygems' require 'raspell'

def xxx speller = Aspell.new("ru_RU") speller.suggestion_mode = Aspell::NORMAL @xxx = speller.check("лошадь").to_s end

If your script contains only those lines then this is normal - you've defined an xxx method but you haven't called it.

Fred

Frederick Cheung wrote:

I have <%= @xxx %> on view, and it prints false.

Also I have tested many words from model, and all was false.

for row in @results if speller.check(row["word"]) ...

I have this problen only with russian words, english works fine.

You should have said that from the start :-). This points to an encoding problem, eg the default encoding used to read your source file being different from whatever was being used by irb (which may depend on terminal settings etc).

Fred

Frederick Cheung wrote:

You should have said that from the start :-). This points to an encoding problem, eg the default encoding used to read your source

Database is in UTF-8, but it aslo doesn't work if word is in controller sourse: speller.check("лошадь")

So how can I test different encodings?

7stud -- wrote:

Fresh Mix wrote:

Frederick Cheung wrote:

You should have said that from the start :-). This points to an encoding problem, eg the default encoding used to read your source

Database is in UTF-8, but it aslo doesn't work if word is in controller sourse: speller.check("лошадь")

So how can I test different encodings?

What version of ruby are you using with rails? Are you using a different version of ruby for your irb tests?

I think, it is same, because I have only ruby 1.8.7 installed.

$ ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]

.......

Anyway, by default Rails will set the encoding to UTF8 (just put Rails.logger.debug "Kcode: #{$KCODE}" to confirm this is the case for you). To see what encoding *is* working properly, just check the $KCODE global from irb. Then set that accordingly in your environment.rb and restart your app.