ruby-on-rails - remote - rails ujs
Rails AJAX: obtener una selección desplegable para completar una tabla (3)
Estoy tratando de obtener una selección de un menú desplegable para rellenar una tabla en la misma página, usando AJAX para que los cambios aparezcan sin una actualización de página. Llegué al punto de calcular el código para la llamada remota y agregar la acción personalizada al controlador, pero no sé cómo obtener la información devuelta en la tabla que tengo. Por el momento, la tabla solo está recorriendo todos los proyectos, pero quiero que solo muestre la información para el proyecto que se selecciona.
¿Qué necesitaría escribir en un archivo JS (rjs?) Para que procesara la información devuelta, y qué cambios tendría que hacer en la tabla existente para asegurarme de que está mostrando la información correcta?
Desplegable (con llamada AJAX):
<%= collection_select :id, Project.all, :id, :name, :onchange => remote_function(:url=>{:action => ''populate_projects''}) %>
Acción del controlador:
def populate_projects
@project = Project.find(params[:id])
end
Y la tabla existente:
<table>
<tr>
<th>Name</th>
<th>Category</th>
<th>Budget</th>
<th>Deadline</th>
<th>Company ID</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @projects.each do |project| %>
<tr>
<td><%= project.name %></td>
<td><%= project.category %></td>
<td><%= number_to_currency(project.budget, :unit => "£") %></td>
<td><%= project.deadline.strftime("%A, %d %B %Y") %></td>
<td><%= project.company_id %></td>
<td><%= link_to ''More'', project %></td>
<td><%= link_to ''Edit'', edit_project_path(project) %></td>
<td><%= link_to ''Delete'', project, confirm: ''Are you sure?'', method: :delete %></td>
</tr>
<% end %>
</table>
Cree un _project.html.erb
parcial y renderice este parcial en la página de índice. <%= render @projects %>
En el cambio de proyecto solo renderiza parcial con objeto de proyecto y página de actualización usando rjs.
En el archivo js (RJS) necesita llamar al archivo HTML parcial y este archivo tiene tablas que ha mostrado aquí en su pregunta.
Espero que esto te ayude.
Gracias.
Supongamos que está usando jquery
<%= collection_select :project, :id, Project.all, :id, :name, {}, {:onchange => ''$.get("/populate_projects")''} %>
entonces en tu controlador
def populate_projects
@project = Project.find(params[:id])
respond_to do |format|
...
format.js { render ''populate_projects'', :formats => [:js] }
...
end
end
finalmente, cree populate_projects.js.erb
y escriba cualquier script de contenido de tabla de cambios. @project
está disponible en ese script.