My task model has the following function: class Task < ActiveRecord::Base belongs_to :user belongs_to :project belongs_to :person ... stuff ... def summary ''<b>'' + user.firstname + '' '' + due.strftime(''%m/%d'') + '':</b> '' + ''<a href="'' + url_for(:action => "edit", :id => id) + ''">'' + name + ''</a>'' end end ... which is used elsewhere by doing something like this: project.tasks.find(:all, :conditions => ''completed = 0'').collect{|p| p.summary}.join('',<br/> '') ... which is then used for display, to show all the tasks associated with a particular project, with each task being a hyperlink that the user can click to open that particular task. (''Edit'' at the moment ''cause I don''t yet have a show.) The problem is, url_for and link_to both generate errors when put there (it works fine without that part). And it doesn''t seem to work right in the helper either. What''s the right way to do this? Thanks, Sai --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Many MVC hardcases would say that HTML in the model or controller is not a good idea. Helpers and partials are a better way to go in terms of readability. I have been trying hard to learn rails, be DRY and impliment the philosophy behind the framework. As such I have used the following approach in my latest project: Firstly, read the following: http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model. I found this approach has improved the readability and understandability of my code greatly. So, I would change: project.tasks.find(:all, :conditions => ''completed = 0'').collect{|p| p.summary}.join('',<br/> '') to something like: @projects = Project.tasks.not_completed Then create a model method to respond: def self.not_completed project.tasks.find(:all, :conditions => ''completed = 0'') end Then in the view you can: <%= render :partial => "/project/link", :collection => @projects %> and finally, create a partial to display each uncompleted task: <b> <%= link.user.firstname %> <%= due.strftime(''%m/%d'') %> </b> <%= link_to (link.name, :controller =>"project", :action => "edit", :id => link.id) %> </a> I am sure this code will not work without a few tweaks (like I said, I am learning), but it''s one way to achieve what you need. I am sure another guru will enlighten us both further.... --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Or else You can just directly change your stuff: def summary ''<b>'' + user.firstname + '' '' + due.strftime(''%m/%d'') + '':</b> '' + ''<a href="'' + url_for(:action => "edit", :id => id) + ''">'' + name + ''</a>'' end LIKE THIS: def summary ''<b>'' + user.firstname + '' '' + due.strftime(''%m/%d'') + '':</b> '' + link_to (name, :action => "edit", :id => id) end --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
def summary ''<b>'' + user.firstname + '' '' + due.strftime(''%m/%d'') + '':</b> '' + link_to ("#{name}", :action => "edit", :id => id) end --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
This doesn''t work - try it. Both url_for and link_to generate "method undefined" errors when put in the model file. As for MVC - yes, it''d be better to put it in a view, but I''m using this with AjaxScaffold and therefore just want to generate a clip that gets sent as the column value (i.e. for table ''projects'', column ''tasks'', it calls this [plus some other stuff] to fill the column). It works if I hardcode it, i.e. http://foo/control/action/number but that''s really ugly. I''d like to get link_to to work. instead. On Dec 13, 6:25 am, "Carolene" <kiran.sou...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> def summary > ''<b>'' + user.firstname + '' '' + due.strftime(''%m/%d'') + '':</b> '' + > link_to ("#{name}", :action => "edit", :id => id) > end--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
The following should work: Try to define the same in a helper by using CONTENT_TAG def summary content << content_tag(''div'', ''<b>'' + user.firstname + '' '' + due.strftime(''%m/%d'') + '':</b> '' + link_to ("#{name}", :action => "edit", :id => id) ) end --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---