I am seeing a curious anomaly with the inspect method. It displays one of the objects in a way I don''t understand. I''ll use the Recipes example to illustrate. First, I''ll describe the recipes table, then show how the @recipe variable is being created in the controller and passed in to the show view, and then show how I''m using the ''inspect'' method to display the @recipe object. mysql> describe recipes; +--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | title | varchar(255) | NO | | | | | instructions | text | YES | | NULL | | | description | varchar(255) | YES | | NULL | | | date | date | YES | | NULL | | | category_id | int(6) | YES | | NULL | | +--------------+--------------+------+-----+---------+----------------+ In class RecipeController: def show @recipe = Recipe.find(params[:id]) end In show.rhtml: <% @recipe.inspect.split('','').each do |object| %> <%= object %><br> <% end %> Now, for a particular instance, this displays the following on the web page for the show view: #"Killer Mushrooms" "date"=>"2006-01-11" "id"=>"3" "category_id"=>"1" "description"=>"Last one you''ll ever need" "instructions"=>" Serve randomly collected forest mushrooms"}> Note the first line. That is the "title" column. WHy is it displayed as #"Killer Mushrooms" instead of "title"=>"Killer Mushrooms" ?? Now, if I include the following in show.rhtml: title = <%= @recipe.title %><br> then this is displayed: title = Killer Mushrooms So clearly the object contains the ''title'' method. Can anybody help me understand why this object being displayed by ''inspect'' in this way? (PS: The tokenization performed by the split has no effect, the same thing is displayed if it is not tokenized, just all on the same line.) - Paint me Curious (Ruby) -- Posted via http://www.ruby-forum.com/.
2006/1/18, dr plutes <pluto1@gmail.com>:> Can anybody help me understand why this object being displayed by > ''inspect'' in this way?Did you know about debug ? <%= debug(@recipe) %> Also, if you view source, what do you see ? Because inspect will return: <#0x39801 Recipe... as the first token. Bye ! -- Fran?ois Beausoleil http://blog.teksol.info/
> Now, for a particular instance, this displays the following on the web > page for the show view: > > #"Killer Mushrooms" > "date"=>"2006-01-11" > "id"=>"3" > "category_id"=>"1" > "description"=>"Last one you''ll ever need" > "instructions"=>" Serve randomly collected forest mushrooms"}> >What does the HTML for this look like? -- Posted via http://www.ruby-forum.com/.
Simple HTML display issue. Too bad this forum doesn''t allow poster to delete own posts, sorry! -- Posted via http://www.ruby-forum.com/.
> ...if you view source, what do you see ? Because inspect will > return: > > <#0x39801 Recipe... > > as the first token.Thanks! Indeed, when I do a puts to the console, I see displayed there the following: #<Recipe:0x37c31a8 @attributes={"title"=>"Killer Mushrooms", "date"=>"2006-01-11", "id"=>"3", "category_id"=>"1", "description"=>"Last one you''ll ever need", "instructions"=>" Serve randomly collected forest mushrooms"}> And as a result, the following string: <Recipe:0x38af620 @attributes={"title"=> ends up being ''invisible''.> Did you know about debug ? > > <%= debug(@recipe) %>Double thanks! Much appreciated -- Posted via http://www.ruby-forum.com/.
At 1/18/2006 03:33 PM, you wrote:>In show.rhtml: > <% @recipe.inspect.split('','').each do |object| %> > <%= object %><br> > <% end %><%=h object %>< if you html_escape() it so that you don''t have "<title ..." perhaps it will be better -Rob
Rob Biedenharn wrote:> At 1/18/2006 03:33 PM, you wrote: >>In show.rhtml: >> <% @recipe.inspect.split('','').each do |object| %> >> <%= object %><br> >> <% end %> > > <%=h object %>< > if you html_escape() it so that you don''t have "<title ..." perhaps > it will be better > > -RobIndeed - that does the trick. Thanks! Does the <%=h object %> display the contents of any object ''as-is'' without its contents being confused by the browser to be a tag or other html element? -- Posted via http://www.ruby-forum.com/.
At 1/18/2006 06:46 PM, you wrote:>Rob Biedenharn wrote: > > At 1/18/2006 03:33 PM, you wrote: > >>In show.rhtml: > >> <% @recipe.inspect.split('','').each do |object| %> > >> <%= object %><br> > >> <% end %> > > > > <%=h object %>< > > if you html_escape() it so that you don''t have "<title ..." perhaps > > it will be better > > > > -Rob > >Indeed - that does the trick. Thanks! > >Does the <%=h object %> display the contents of any object ''as-is'' >without its contents being confused by the browser to be a tag or other >html element?h is short for html_escape and Ruby lets you skip the ()''s when you don''t need them, so the short answer is: Yes. Any time you have content that could be taken the wrong way by the browser, use html_escape: <%= html_escape(object) %> but you''re much more likely to see (and do) <%=h object %> -Rob -------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060118/46fc7b98/attachment.html