I''m using a legacy table, where the unique id is not ''id'' I have a Model class like the following: class Article < ActiveRecord::Base set_primary_key "ARTICLE_ID" end however, using a link_to like the following (modified scaffolding), the link has no id value: <% for article in @articles %> <tr> <% for column in Article.content_columns %> <td><%=h article.send(column.name) %></td> <% end %> <td><%= link_to ''Show'', :action => ''show_article'', :id => article %></td> <td><%= link_to ''Edit'', :action => ''edit_article'', :id => article %></td> <td><%= link_to ''Destroy'', { :action => ''destroy_article'', :id => article }, :confirm => ''Are you sure?'', :post => true %></td> </tr> <% end %> (In case this gets rendered as HTML, the link in question is: <%link_to ''Show'', :action => ''show_article'', :id => article %>) The link looks like "/controller/show_article/" Instead of "/controller/show_article/43" What''s up? Rails console:>> article = Article.find(:first)=> #<Article:0x5bd7858 @attributes={"article_headline"=>"...", "byline"=>nil, "display_date"=>Tue Oct 17 00:01:00 GMT-5:00 2000, "status"=>"PUB", "print_page"=>nil, "hot_code"=>"N", "headline"=>"...", "creation_date"=>Mon Jul 09 15:39:04 GMT-5:00 2001, "article_type"=>"...", "flashline"=>nil, "publication"=>"...", "base_doc_id"=>"...", "summary"=>"...", "file_location"=>"C", "page"=>"...", "display_name"=>"...", "rev_doc_id"=>"...", "article_id"=>329901.0, "section"=>"...", "source"=>"...", "to_be_purged"=>1.0}>>> article.id=> nil>>
Try calling article.to_param and see what it returns. I would guess that is where your problem is since you are defining your own primary key. Perhaps this is a bug in rails? If that is the case, you can fix it by either implementing your to_param to return your article_id, or passing :id => article.article_id Tom On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote:> I''m using a legacy table, where the unique id is not ''id'' > I have a Model class like the following: > > class Article < ActiveRecord::Base > set_primary_key "ARTICLE_ID" > end > > however, using a link_to like the following (modified scaffolding), > the link has no id value: > > <% for article in @articles %> > <tr> > <% for column in Article.content_columns %> > <td><%=h article.send(column.name) %></td> > <% end %> > <td><%= link_to ''Show'', :action => ''show_article'', :id => article %></td> > <td><%= link_to ''Edit'', :action => ''edit_article'', :id => article %></td> > <td><%= link_to ''Destroy'', { :action => ''destroy_article'', :id => > article }, :confirm => ''Are you sure?'', :post => true %></td> > </tr> > <% end %> > (In case this gets rendered as HTML, the link in question is: <%> link_to ''Show'', :action => ''show_article'', :id => article %>) > > The link looks like "/controller/show_article/" > Instead of "/controller/show_article/43" > > What''s up? > > Rails console: > >> article = Article.find(:first) > => #<Article:0x5bd7858 @attributes={"article_headline"=>"...", > "byline"=>nil, "display_date"=>Tue Oct 17 00:01:00 GMT-5:00 2000, > "status"=>"PUB", "print_page"=>nil, "hot_code"=>"N", > "headline"=>"...", "creation_date"=>Mon Jul 09 15:39:04 GMT-5:00 2001, > "article_type"=>"...", "flashline"=>nil, "publication"=>"...", > "base_doc_id"=>"...", "summary"=>"...", "file_location"=>"C", > "page"=>"...", "display_name"=>"...", > "rev_doc_id"=>"...", "article_id"=>329901.0, "section"=>"...", > "source"=>"...", "to_be_purged"=>1.0}> > >> article.id > => nil > >> > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-- Tom Davies http://atomgiant.com http://gifthat.com
thanks, I didn''t know about to_param (I was digging through rails source trying to figure out how link_to turned the object into an id to track this down)>> article.to_param=> nil yeah, I think it might be a bug, but I''d like someone to confirm that I''m doing things right. for now I guess I''ll implement the to_param, but I would like not to have to do this. Also, I expected that using "set_primary_key" would provide an "id" attribute to the model, but it''s nil. On 7/7/06, Tom Davies <atomgiant@gmail.com> wrote:> Try calling article.to_param and see what it returns. I would guess > that is where your problem is since you are defining your own primary > key. Perhaps this is a bug in rails? > > If that is the case, you can fix it by either implementing your > to_param to return your article_id, or passing :id => > article.article_id > > Tom > > > On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote: > > I''m using a legacy table, where the unique id is not ''id'' > > I have a Model class like the following: > > > > class Article < ActiveRecord::Base > > set_primary_key "ARTICLE_ID" > > end > > > > however, using a link_to like the following (modified scaffolding), > > the link has no id value: > > > > <% for article in @articles %> > > <tr> > > <% for column in Article.content_columns %> > > <td><%=h article.send(column.name) %></td> > > <% end %> > > <td><%= link_to ''Show'', :action => ''show_article'', :id => article %></td> > > <td><%= link_to ''Edit'', :action => ''edit_article'', :id => article %></td> > > <td><%= link_to ''Destroy'', { :action => ''destroy_article'', :id => > > article }, :confirm => ''Are you sure?'', :post => true %></td> > > </tr> > > <% end %> > > (In case this gets rendered as HTML, the link in question is: <%> > link_to ''Show'', :action => ''show_article'', :id => article %>) > > > > The link looks like "/controller/show_article/" > > Instead of "/controller/show_article/43" > > > > What''s up? > > > > Rails console: > > >> article = Article.find(:first) > > => #<Article:0x5bd7858 @attributes={"article_headline"=>"...", > > "byline"=>nil, "display_date"=>Tue Oct 17 00:01:00 GMT-5:00 2000, > > "status"=>"PUB", "print_page"=>nil, "hot_code"=>"N", > > "headline"=>"...", "creation_date"=>Mon Jul 09 15:39:04 GMT-5:00 2001, > > "article_type"=>"...", "flashline"=>nil, "publication"=>"...", > > "base_doc_id"=>"...", "summary"=>"...", "file_location"=>"C", > > "page"=>"...", "display_name"=>"...", > > "rev_doc_id"=>"...", "article_id"=>329901.0, "section"=>"...", > > "source"=>"...", "to_be_purged"=>1.0}> > > >> article.id > > => nil > > >> > > _______________________________________________ > > Rails mailing list > > Rails@lists.rubyonrails.org > > http://lists.rubyonrails.org/mailman/listinfo/rails > > > > > -- > Tom Davies > > http://atomgiant.com > http://gifthat.com > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
well, I think I just solved it. #set_primary_key "ARTICLE_ID" set_primary_key "article_id" and it worked. Here''s why: def id attr_name = self.class.primary_key column = column_for_attribute(attr_name) define_read_method(:id, attr_name, column) if self.class.generate_read_methods read_attribute(attr_name) end On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote:> thanks, I didn''t know about to_param (I was digging through rails > source trying to figure out how link_to turned the object into an id > to track this down) > > >> article.to_param > => nil > > yeah, I think it might be a bug, but I''d like someone to confirm that > I''m doing things right. for now I guess I''ll implement the to_param, > but I would like not to have to do this. > > Also, I expected that using "set_primary_key" would provide an "id" > attribute to the model, but it''s nil. > > On 7/7/06, Tom Davies <atomgiant@gmail.com> wrote: > > Try calling article.to_param and see what it returns. I would guess > > that is where your problem is since you are defining your own primary > > key. Perhaps this is a bug in rails? > > > > If that is the case, you can fix it by either implementing your > > to_param to return your article_id, or passing :id => > > article.article_id > > > > Tom > > > > > > On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote: > > > I''m using a legacy table, where the unique id is not ''id'' > > > I have a Model class like the following: > > > > > > class Article < ActiveRecord::Base > > > set_primary_key "ARTICLE_ID" > > > end > > > > > > however, using a link_to like the following (modified scaffolding), > > > the link has no id value: > > > > > > <% for article in @articles %> > > > <tr> > > > <% for column in Article.content_columns %> > > > <td><%=h article.send(column.name) %></td> > > > <% end %> > > > <td><%= link_to ''Show'', :action => ''show_article'', :id => article %></td> > > > <td><%= link_to ''Edit'', :action => ''edit_article'', :id => article %></td> > > > <td><%= link_to ''Destroy'', { :action => ''destroy_article'', :id => > > > article }, :confirm => ''Are you sure?'', :post => true %></td> > > > </tr> > > > <% end %> > > > (In case this gets rendered as HTML, the link in question is: <%> > > link_to ''Show'', :action => ''show_article'', :id => article %>) > > > > > > The link looks like "/controller/show_article/" > > > Instead of "/controller/show_article/43" > > > > > > What''s up? > > > > > > Rails console: > > > >> article = Article.find(:first) > > > => #<Article:0x5bd7858 @attributes={"article_headline"=>"...", > > > "byline"=>nil, "display_date"=>Tue Oct 17 00:01:00 GMT-5:00 2000, > > > "status"=>"PUB", "print_page"=>nil, "hot_code"=>"N", > > > "headline"=>"...", "creation_date"=>Mon Jul 09 15:39:04 GMT-5:00 2001, > > > "article_type"=>"...", "flashline"=>nil, "publication"=>"...", > > > "base_doc_id"=>"...", "summary"=>"...", "file_location"=>"C", > > > "page"=>"...", "display_name"=>"...", > > > "rev_doc_id"=>"...", "article_id"=>329901.0, "section"=>"...", > > > "source"=>"...", "to_be_purged"=>1.0}> > > > >> article.id > > > => nil > > > >> > > > _______________________________________________ > > > Rails mailing list > > > Rails@lists.rubyonrails.org > > > http://lists.rubyonrails.org/mailman/listinfo/rails > > > > > > > > > -- > > Tom Davies > > > > http://atomgiant.com > > http://gifthat.com > > _______________________________________________ > > Rails mailing list > > Rails@lists.rubyonrails.org > > http://lists.rubyonrails.org/mailman/listinfo/rails > > >
sorry, my hand slipped :)>> article.class.primary_key=> "ARTICLE_ID">> column = article.column_for_attribute("ARTICLE_ID")=> nil>> column = article.column_for_attribute("article_id")=> #<ActiveRecord::ConnectionAdapters::OracleColumn:0x53b4640 @limit=nil, @scale =nil, @text=false, @sql_type="NUMBER", @name="article_id", @primary=false, @null =false, @default=nil, @type=:float, @number=true> On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote:> well, I think I just solved it. > > #set_primary_key "ARTICLE_ID" > set_primary_key "article_id" > > and it worked. > > Here''s why: > def id > attr_name = self.class.primary_key > column = column_for_attribute(attr_name) > define_read_method(:id, attr_name, column) if > self.class.generate_read_methods > read_attribute(attr_name) > end > > > On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote: > > thanks, I didn''t know about to_param (I was digging through rails > > source trying to figure out how link_to turned the object into an id > > to track this down) > > > > >> article.to_param > > => nil > > > > yeah, I think it might be a bug, but I''d like someone to confirm that > > I''m doing things right. for now I guess I''ll implement the to_param, > > but I would like not to have to do this. > > > > Also, I expected that using "set_primary_key" would provide an "id" > > attribute to the model, but it''s nil. > > > > On 7/7/06, Tom Davies <atomgiant@gmail.com> wrote: > > > Try calling article.to_param and see what it returns. I would guess > > > that is where your problem is since you are defining your own primary > > > key. Perhaps this is a bug in rails? > > > > > > If that is the case, you can fix it by either implementing your > > > to_param to return your article_id, or passing :id => > > > article.article_id > > > > > > Tom > > > > > > > > > On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote: > > > > I''m using a legacy table, where the unique id is not ''id'' > > > > I have a Model class like the following: > > > > > > > > class Article < ActiveRecord::Base > > > > set_primary_key "ARTICLE_ID" > > > > end > > > > > > > > however, using a link_to like the following (modified scaffolding), > > > > the link has no id value: > > > > > > > > <% for article in @articles %> > > > > <tr> > > > > <% for column in Article.content_columns %> > > > > <td><%=h article.send(column.name) %></td> > > > > <% end %> > > > > <td><%= link_to ''Show'', :action => ''show_article'', :id => article %></td> > > > > <td><%= link_to ''Edit'', :action => ''edit_article'', :id => article %></td> > > > > <td><%= link_to ''Destroy'', { :action => ''destroy_article'', :id => > > > > article }, :confirm => ''Are you sure?'', :post => true %></td> > > > > </tr> > > > > <% end %> > > > > (In case this gets rendered as HTML, the link in question is: <%> > > > link_to ''Show'', :action => ''show_article'', :id => article %>) > > > > > > > > The link looks like "/controller/show_article/" > > > > Instead of "/controller/show_article/43" > > > > > > > > What''s up? > > > > > > > > Rails console: > > > > >> article = Article.find(:first) > > > > => #<Article:0x5bd7858 @attributes={"article_headline"=>"...", > > > > "byline"=>nil, "display_date"=>Tue Oct 17 00:01:00 GMT-5:00 2000, > > > > "status"=>"PUB", "print_page"=>nil, "hot_code"=>"N", > > > > "headline"=>"...", "creation_date"=>Mon Jul 09 15:39:04 GMT-5:00 2001, > > > > "article_type"=>"...", "flashline"=>nil, "publication"=>"...", > > > > "base_doc_id"=>"...", "summary"=>"...", "file_location"=>"C", > > > > "page"=>"...", "display_name"=>"...", > > > > "rev_doc_id"=>"...", "article_id"=>329901.0, "section"=>"...", > > > > "source"=>"...", "to_be_purged"=>1.0}> > > > > >> article.id > > > > => nil > > > > >> > > > > _______________________________________________ > > > > Rails mailing list > > > > Rails@lists.rubyonrails.org > > > > http://lists.rubyonrails.org/mailman/listinfo/rails > > > > > > > > > > > > > -- > > > Tom Davies > > > > > > http://atomgiant.com > > > http://gifthat.com > > > _______________________________________________ > > > Rails mailing list > > > Rails@lists.rubyonrails.org > > > http://lists.rubyonrails.org/mailman/listinfo/rails > > > > > >
I just read about the to_param today in this mailing list :) That makes sense. So the primary key is either case sensitive or just needs to be all lower case. I haven''t had to use the set_primary_key directive. Tom On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote:> sorry, my hand slipped :) > > >> article.class.primary_key > => "ARTICLE_ID" > >> column = article.column_for_attribute("ARTICLE_ID") > => nil > >> column = article.column_for_attribute("article_id") > => #<ActiveRecord::ConnectionAdapters::OracleColumn:0x53b4640 @limit=nil, @scale > =nil, @text=false, @sql_type="NUMBER", @name="article_id", @primary=false, @null > =false, @default=nil, @type=:float, @number=true> > > On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote: > > well, I think I just solved it. > > > > #set_primary_key "ARTICLE_ID" > > set_primary_key "article_id" > > > > and it worked. > > > > Here''s why: > > def id > > attr_name = self.class.primary_key > > column = column_for_attribute(attr_name) > > define_read_method(:id, attr_name, column) if > > self.class.generate_read_methods > > read_attribute(attr_name) > > end > > > > > > On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote: > > > thanks, I didn''t know about to_param (I was digging through rails > > > source trying to figure out how link_to turned the object into an id > > > to track this down) > > > > > > >> article.to_param > > > => nil > > > > > > yeah, I think it might be a bug, but I''d like someone to confirm that > > > I''m doing things right. for now I guess I''ll implement the to_param, > > > but I would like not to have to do this. > > > > > > Also, I expected that using "set_primary_key" would provide an "id" > > > attribute to the model, but it''s nil. > > > > > > On 7/7/06, Tom Davies <atomgiant@gmail.com> wrote: > > > > Try calling article.to_param and see what it returns. I would guess > > > > that is where your problem is since you are defining your own primary > > > > key. Perhaps this is a bug in rails? > > > > > > > > If that is the case, you can fix it by either implementing your > > > > to_param to return your article_id, or passing :id => > > > > article.article_id > > > > > > > > Tom > > > > > > > > > > > > On 7/7/06, Dean Holdren <deanholdren@gmail.com> wrote: > > > > > I''m using a legacy table, where the unique id is not ''id'' > > > > > I have a Model class like the following: > > > > > > > > > > class Article < ActiveRecord::Base > > > > > set_primary_key "ARTICLE_ID" > > > > > end > > > > > > > > > > however, using a link_to like the following (modified scaffolding), > > > > > the link has no id value: > > > > > > > > > > <% for article in @articles %> > > > > > <tr> > > > > > <% for column in Article.content_columns %> > > > > > <td><%=h article.send(column.name) %></td> > > > > > <% end %> > > > > > <td><%= link_to ''Show'', :action => ''show_article'', :id => article %></td> > > > > > <td><%= link_to ''Edit'', :action => ''edit_article'', :id => article %></td> > > > > > <td><%= link_to ''Destroy'', { :action => ''destroy_article'', :id => > > > > > article }, :confirm => ''Are you sure?'', :post => true %></td> > > > > > </tr> > > > > > <% end %> > > > > > (In case this gets rendered as HTML, the link in question is: <%> > > > > link_to ''Show'', :action => ''show_article'', :id => article %>) > > > > > > > > > > The link looks like "/controller/show_article/" > > > > > Instead of "/controller/show_article/43" > > > > > > > > > > What''s up? > > > > > > > > > > Rails console: > > > > > >> article = Article.find(:first) > > > > > => #<Article:0x5bd7858 @attributes={"article_headline"=>"...", > > > > > "byline"=>nil, "display_date"=>Tue Oct 17 00:01:00 GMT-5:00 2000, > > > > > "status"=>"PUB", "print_page"=>nil, "hot_code"=>"N", > > > > > "headline"=>"...", "creation_date"=>Mon Jul 09 15:39:04 GMT-5:00 2001, > > > > > "article_type"=>"...", "flashline"=>nil, "publication"=>"...", > > > > > "base_doc_id"=>"...", "summary"=>"...", "file_location"=>"C", > > > > > "page"=>"...", "display_name"=>"...", > > > > > "rev_doc_id"=>"...", "article_id"=>329901.0, "section"=>"...", > > > > > "source"=>"...", "to_be_purged"=>1.0}> > > > > > >> article.id > > > > > => nil > > > > > >> > > > > > _______________________________________________ > > > > > Rails mailing list > > > > > Rails@lists.rubyonrails.org > > > > > http://lists.rubyonrails.org/mailman/listinfo/rails > > > > > > > > > > > > > > > > > -- > > > > Tom Davies > > > > > > > > http://atomgiant.com > > > > http://gifthat.com > > > > _______________________________________________ > > > > Rails mailing list > > > > Rails@lists.rubyonrails.org > > > > http://lists.rubyonrails.org/mailman/listinfo/rails > > > > > > > > > > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-- Tom Davies http://atomgiant.com http://gifthat.com