Forum: Ruby on Rails Ruby or Rails bug?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Fresh M. (Guest)
on 2009-05-03 17:09
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?
7stud -. (Guest)
on 2009-05-03 17:28
Fresh M. wrote:
> 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?

Maybe:

@xxx = false

def xxx
  @xxx = true
end

puts @xxx

--output:--
false
Conrad T. (Guest)
on 2009-05-03 18:19
(Received via mailing list)
On Sun, May 3, 2009 at 6:09 AM, Fresh M.
<removed_email_address@domain.invalid>wrote:

> irb(main):004:0> speller.suggestion_mode = Aspell::NORMAL
>  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
Frederick C. (Guest)
on 2009-05-03 21:01
(Received via mailing list)
On May 3, 2:09 pm, Fresh M. <removed_email_address@domain.invalid> wrote:
>
> 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
Fresh M. (Guest)
on 2009-05-03 21:19
Frederick C. wrote:
> On May 3, 2:09 pm, Fresh M. <removed_email_address@domain.invalid> wrote:
>>
>> 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

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.
Frederick C. (Guest)
on 2009-05-03 22:14
(Received via mailing list)
On May 3, 6:19 pm, Fresh M. <removed_email_address@domain.invalid> 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
Fresh M. (Guest)
on 2009-05-03 22:55
Frederick C. 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 -. (Guest)
on 2009-05-03 23:35
Fresh M. wrote:
> Frederick C. 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?
Fresh M. (Guest)
on 2009-05-03 23:51
7stud -- wrote:
> Fresh M. wrote:
>> Frederick C. 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]
7stud -. (Guest)
on 2009-05-04 00:46
resh Mix wrote:
>
> 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]

Ok.  ruby 1.8.* doesn't understand multi-byte/unicode characters, like
russian characters.  ruby thinks that every character is an ascii
character, where one byte equals one character.  However, you aren't
asking a ruby method to do anything with your string--you are calling an
aspell method.  Is there any reason to believe that aspell can recognize
a character that is made up of several bytes?

As for irb, personally I never use the command line interactive mode in
any language because after a few times spending hours trying to figure
out why the results in interactive mode were different than in a
program, I determined that I would never waste time doing that again.
The only output that matters is your program's output.  Forget about
what irb says and instead write a small example program when testing
things out.

If you write a small program, with the same content as irb, do you get
true or false for your aspell calculations?
pharrington (Guest)
on 2009-05-04 01:23
(Received via mailing list)
.......

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.
7stud -. (Guest)
on 2009-05-04 01:54
pharrington wrote:
> .......
>
> 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.

Setting $KCODE to "u" in a ruby program is not a cure all. Not all the
ruby methods will suddenly recognize that characters consist of
multi-bytes.  For instance,

$KCODE = "n"

str = "лошадь"
puts str.length

$KCODE = "u"

puts str.length

--output:--
12
12


If $KCODE were a cure all, they(Matz, et al) would just switch it on in
permanently, and the unicode problems would disappear.
Fresh M. (Guest)
on 2009-05-06 13:30
can any solve this problem?
Fresh M. (Guest)
on 2009-05-11 11:33
Fresh M. wrote:
> can any solve this problem?

Help ???
This topic is locked and can not be replied to.