Forum: Ruby on Rails nested resources , forms and update

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.
803ad415efcdcbf09b1addeb319650d7?d=identicon&s=25 Adam Akhtar (thegeezer3)
on 2009-02-03 12:37
Hi I have nested resources i.e. projects which have many tasks and a
task belongs to a project.

In my project show view I show project info i.e. title and description
and then list all the tasks associated with it.

I want to have a simple non-javascript form which allows a user to add a
new task.

e.g.

<!-- listing tasks is above this -->
<% form_for @project, :url => @project, :method => "PUT" do |form| %>
  <% fields_for @project.tasks.first do |task|%>
        <p>
          Task: <%= task.text_field :title %>
        </p>
  <% end %>
<p>
  <%= submit_tag "Add Task", :class => "submit" %>
</p>
<% end %>

In the controller i have this

def show
  @project = Project.find(params[:id])
  #create an empty task for the form
  @project.task.create
end

Problems -
Since ive created an empty task for @project, this shows up in my list
of tasks when it shouldnt. I know i could check all tasks in the view to
see if they are actually records with .new_record? but thats adding code
to the view and i feel there must be a much better solution to this?

I also dont like this <% fields_for @project.tasks.first do |task|%> as
the .first implies im dealing with many empty tasks waiting to be
created when in fact there will only be one - is there a better
workaroudn for this as well?
9a2a53db8e9b4476038c94a64b32833f?d=identicon&s=25 Ryan Bigg (ryan-bigg)
on 2009-02-03 12:56
(Received via mailing list)
Do @task = @project.tasks.build and use that as the fields_for argument



On 03/02/2009, at 21:37, Adam Akhtar <rails-mailing-list@andreas-
803ad415efcdcbf09b1addeb319650d7?d=identicon&s=25 Adam Akhtar (thegeezer3)
on 2009-02-03 13:32
ahh i got confused between create and build. And the @task idea, dont
know why i  didnt think about that.

Can i confirm that build doesnt actually add a blank task to @project
but rather just returns one?

Last im wondering how rest changes where i add code. In the above case
when a user adds a new task to my project witin the project show view,
where should i direct to? The create in the task controller or just
update in the project controller (id create build the new task and then
update the project model)? Im not sure whether rest encourages you to
code as much as possible in the parent resource.

Any tips would be greatly appreciated.
This topic is locked and can not be replied to.