Nested Resource

82 views
Skip to first unread message

Lucas Lima de Souza

unread,
Jul 13, 2012, 2:51:36 PM7/13/12
to plataformate...@googlegroups.com
Como faço para o simple_form acessar o post de uma action gerada de um:

resources :users do
  resources :lists
end

Desejo criar uma nova lista e essa lista depende do id do usuário.

simple_form tenta acessar por lists_path mais gera:

 undefined method `lists_path' for #<#<Class:0xa68f4c0>:0xa68d364>

valeu =D

Rafael Mendonça França

unread,
Jul 13, 2012, 3:11:10 PM7/13/12
to plataformate...@googlegroups.com
Você poderia mandar a código do formulário?

Rafael Mendonça França
http://twitter.com/rafaelfranca
https://github.com/rafaelfranca



2012/7/13 Lucas Lima de Souza <lucas...@gmail.com>

thiagocifani

unread,
Jul 13, 2012, 3:29:55 PM7/13/12
to plataformate...@googlegroups.com
tenta adicionar users_lists_path ao inves de apenas lists_path
 já que é um resource aninhado.
--
thiagocifani

Rafael Mendonça França

unread,
Jul 13, 2012, 3:32:53 PM7/13/12
to plataformate...@googlegroups.com
Outro jeito é aninhar os dois models

simple_form_for [@user, @list]

foi exatamente por isso que eu pedi o código do formulário.
2012/7/13 thiagocifani <cifani...@gmail.com>

thiagocifani

unread,
Jul 13, 2012, 3:54:05 PM7/13/12
to plataformate...@googlegroups.com
Sim Rafael, eu uso mais do jeito que vc falou mesmo ;) 

Vamos ver se ele manda o código .

Enviado via iPad

Lucas Lima de Souza

unread,
Jul 16, 2012, 10:41:49 AM7/16/12
to plataformate...@googlegroups.com
Alinhando os modelos no form:

<%=simple_form_for [@user,@list] do |f| %>

<p>
<%=f.label :name, "Name List" %><br />
<%=f.text_field :name, :size => 50 %>
<%=f.collection_radio_buttons :status, [['public','Public'],['private','Private']], :first, :last  %>
</p>

<div id="tasks">
<h3> Taks</h3>

<%=f.simple_fields_for :tasks do |task_form| %>
<%= render 'task_form', :f => task_form %>
<% end %>


</div>

<%= f.submit "Submit"%>
<%=image_tag '/icons/icon-add.png'%><%= link_to_add_fields("Add task",f,:tasks)%>

<% end %>

com os resources:
 resources :users, :only => :show do
    resources :lists, :controller => "users/lists"
  end

o erro continua:

undefined method `lists_path' 

Rafael Mendonça França

unread,
Jul 16, 2012, 10:50:56 AM7/16/12
to plataformate...@googlegroups.com
Mande o stack trace completo por favor.
2012/7/16 Lucas Lima de Souza <lucas...@gmail.com>

Lucas Lima de Souza

unread,
Jul 16, 2012, 10:53:07 AM7/16/12
to plataformate...@googlegroups.com
executando rake routes, percebi que o POST não tem path. =|

user_lists GET    /users/:user_id/lists(.:format)          users/lists#index
                         POST   /users/:user_id/lists(.:format)          users/lists#create
new_user_list GET    /users/:user_id/lists/new(.:format)      users/lists#new
edit_user_list GET    /users/:user_id/lists/:id/edit(.:format) users/lists#edit
user_list GET    /users/:user_id/lists/:id(.:format)      users/lists#show
           PUT    /users/:user_id/lists/:id(.:format)      users/lists#update
                         DELETE /users/:user_id/lists/:id(.:format)      users/lists#destroy
                    user GET    /users/:id(.:format)                     users#show

Lucas Lima de Souza

unread,
Jul 16, 2012, 10:55:02 AM7/16/12
to plataformate...@googlegroups.com

Showing /home/lucas/workspaceRuby/TaskCommunity/app/views/users/lists/_form.html.erb where line #4 raised:

undefined method `lists_path' for #<#<Class:0xabb77cc>:0xac33020>

Extracted source (around line #4):

1: <%= render 'validate' %>
2: 
3: <div class="new_list">
4: 	<%=simple_form_for [@user,@list] do |f| %>
5: 
6: 		<p>
7: 			<%=f.label :name, "Name List" %><br />

Trace of template inclusion: app/views/users/lists/new.html.erb

Rails.root: /home/lucas/workspaceRuby/TaskCommunity

Application Trace | Framework Trace | Full Trace
app/views/users/lists/_form.html.erb:4:in `_app_views_users_lists__form_html_erb__899148841_90293870'
app/views/users/lists/new.html.erb:4:in `_app_views_users_lists_new_html_erb___40585645_89532210'

On Friday, July 13, 2012 3:51:36 PM UTC-3, Lucas Lima de Souza wrote:

Carlos Antonio da Silva

unread,
Jul 16, 2012, 11:04:47 AM7/16/12
to plataformate...@googlegroups.com
A variável @user existe? Ou seria current_user, @current_user, ou ainda algo diferente?

-- 
At.
Carlos Antonio

Rafael Mendonça França

unread,
Jul 16, 2012, 11:04:39 AM7/16/12
to plataformate...@googlegroups.com
Isso deveria funcionar como você pode ver aqui: https://github.com/rails/rails/blob/beba8267c96a3dbc1f505ecc099dbf14db8dde4c/actionpack/lib/action_view/helpers/form_helper.rb#L240-248

E POST tem path sim. É user_lists o mesmo que o GET na coleção.

Eu não acho que tenha um bug no SimpleForm mas você poderia trocar o `simple_form_for` por `form_for`?

Lucas Lima de Souza

unread,
Jul 16, 2012, 11:32:14 AM7/16/12
to plataformate...@googlegroups.com
Valeu galera!!!

Colocando simple_form_for [current_user, @list] deu certo. =D

o Form final ficou assim:


<%=simple_form_for [current_user,@list] do |f| %>

<p>
<%=f.label :name, "Name List" %><br />
<%=f.text_field :name, :size => 50 %>
<%=f.collection_radio_buttons :status, [['public','Public'],['private','Private']], :first, :last  %>
</p>

<div id="tasks">
<h3> Taks</h3>

<%=f.simple_fields_for :tasks do |task_form| %>
<%= render 'task_form', :f => task_form %>
<% end %>


</div>

<%= f.submit "Submit"%>
<%=image_tag '/icons/icon-add.png'%><%= link_to_add_fields("Add task",f,:tasks)%>

<% end %>

\o/  :)
Reply all
Reply to author
Forward
0 new messages