Rails2.2.2, is it a bug?


#1

yesterday, i make a demo with Rails2.2.2.


model : Movie

class Movie < ActiveRecord::Base
has_many :releases, :dependent => :destroy
validates_presence_of :title
end


model: Release

class Release < ActiveRecord::Base
belongs_to :movie
validates_presence_of :movie_id, :format, :released_on

def to_s
[self.format, released_on.to_s(:short)].join(’ - ')
end
end


controller: release_controller

class ReleasesController < ApplicationController
def show
@release = Release.find(params[:id])

respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @release }
end

end
end


app/views/release/show.html.erb

Movie: <%=h @release.movie_id %>

Format: <%=h @release.format %>

Released on: <%=h @release.released_on %>

<%= link_to ‘Edit’, edit_release_path(@release) %> |
<%= link_to ‘Back’, releases_path %>

it’s correct, it works ! but , when i modify the show page as
following:

Movie: <%=h @release.movie.title %>

Format: <%=h @release.format %>

Released on: <%=h @release.released_on %>

<%= link_to ‘Edit’, edit_release_path(@release) %> |
<%= link_to ‘Back’, releases_path %>

there is have a error. “Attempt to call private method” —
format

Could u help me ?


#2

On Tue, Dec 16, 2008 at 1:36 AM, e$B9@fFe(B removed_email_address@domain.invalid
wrote:

there is have a error. “Attempt to call private method” —
format

See: http://wiki.rubyonrails.org/rails/pages/ReservedWords – the
“reported to cause trouble” section includes ‘format’.

You might want to rename that attribute of your model.

HTH,

Hassan S. ------------------------ removed_email_address@domain.invalid


#3

Thank you.

I know the ‘format’ cause trouble, it’s a private method , cause
stop calling method_missing,
I change ‘format’ to ‘formater’ or other form, it’s be fine.

but why this is good :

app/views/release/show.html.erb

Movie: <%=h @release.movie_id %>

Format: <%=h @release.format %>

Released on: <%=h @release.released_on %>

<%= link_to ‘Edit’, edit_release_path(@release) %> |
<%= link_to ‘Back’, releases_path %>

Could u help me understand it ?

On Dec 16, 8:52 pm, “Hassan S.” removed_email_address@domain.invalid


#4

Did you mean: You got the error in the Model, but it was worked in the
View?

Maybe you can try this in the Model:

self[:format] replace self.format

On Wed, Dec 17, 2008 at 5:34 PM, 浩翔 removed_email_address@domain.invalid wrote:


You might want to rename that attribute of your model.

HTH,

Hassan S. ------------------------ removed_email_address@domain.invalid


TWRUG Blog:
http://blog.rubyonrails.org.tw

CFC on Rails:
http://zusocfc.blogspot.com

Only two surfaces of a box:
http://blog.pixnet.net/zusocfc


#5

Same as the model
Change @release.format to @release[:format]
:slight_smile:
Cause format is a private method, so you can’t call it.
No matter it is in the model or in the view.
So, you can use model[:method] to grab the correct column.
Or, you can try to use: read_attribute(“format”) in the model :slight_smile:

On Thu, Dec 18, 2008 at 10:11 PM, 浩翔 removed_email_address@domain.invalid wrote:


%=h @release.movie.title %>, when i called show action , it

Did you mean: You got the error in the Model, but it was worked in the

Thank you.
Movie:
<%=h @release.released_on %>

there is have a error. “Attempt to call private method” —


TWRUG Blog:http://blog.rubyonrails.org.tw

CFC on Rails:http://zusocfc.blogspot.com

Only two surfaces of a box:http://blog.pixnet.net/zusocfc


TWRUG Blog:
http://blog.rubyonrails.org.tw

CFC on Rails:
http://zusocfc.blogspot.com

Only two surfaces of a box:
http://blog.pixnet.net/zusocfc


#6

Hi,Am Almas M totally new to this site i was jst going the site of
Ruby’s on
Rails i hav no idea how am i to begin with.It would be really gud if u
guide
and let me wht is it all about.

Rdgs
Almas


#7

Thank you.
I know the issue. sefl[:format] is good.
but i dont’ understand why it reported the error : “Attempt to call
private method” in View page, when i called show action.

I know the column ‘format’ will be cause trouble. beacuse all of
instance variable has the private method named ‘format’, right ?

but why it is good as following :

app/views/release/show.html.erb

Movie: <%=h @release.movie_id %>

Format: <%=h @release.format %>

Released on: <%=h @release.released_on %>

<%= link_to ‘Edit’, edit_release_path(@release) %> |
<%= link_to ‘Back’, releases_path %>

it is good . but when i changed <%=h @release.movie_id %> to <
%=h @release.movie.title %>, when i called show action , it
reported a error :“Attempt to call private method”( this line: <%=h
@release.format %>)

how can to explain it ? thank you.


#8

you can read <Agile Web D. With Rails 3rdEdition>


#9

why i can call format in this page:


app/views/release/show.html.erb

Movie: <%=h @release.movie_id %>

Format: <%=h @release.format %>

Released on: <%=h @release.released_on %>

<%= link_to ‘Edit’, edit_release_path(@release) %> |
<%= link_to ‘Back’, releases_path %>

it is good! format can be call . why ?

I’m really confused!