Pergunta

Eu estou fazendo um simples-do aplicativo de lista para me ensinar Ruby on Rails, no entanto eu correr em um problema. Eu tenho um formulário simples que listas de itens a fazer com uma caixa de seleção para a esquerda deles, e um botão "Update" na parte inferior, assim:

[] Faça os pratos
[] Leve o lixo para fora
[] Tomar o mundo
(Update)

Cada item de tarefa é um registro separado no banco de dados com um campo boolean "concluído". Eu quero o formulário para apresentar uma lista de verifiquei-off IDs de item a uma ação em que eu posso definir campo "concluída" de cada item a verdade, o que irá escondê-los da vista.

Eu sei como fazer uma forma que as referências múltiplos modelos, mas não um que referências vários registros do mesmo modelo. Alguma dica?

Obrigado!

Foi útil?

Solução

Railscasts é seu amigo!

http://railscasts.com/episodes/52-update-through-checkboxes

É realmente simples:

# routes.rb
map.resources :tasks, :collection => { :complete => :put }

# tasks_controller.rb
def complete
  Task.update_all(["completed_at=?", Time.now], :id => params[:task_ids])
end

# views\tasks\complete.html.erb
<% form_tag complete_tasks_path, :method => :put do %>
  <ul>
  <% for task in @incomplete_tasks %>
    <li>
      <%= check_box_tag "task_ids[]", task.id %>
      <%= task.name %>
    </li>
  <% end %>
  </ul>
  <%= submit_tag "Mark as Complete" %>
<% end %>

Outras dicas

Wow. Isso é algum tempo. O direito item antes de esta questão no meu leitor de RSS é o mais recente railscast de Ryan Bates e ele aparece para cobrir exatamente o que você está pedindo.

Por que não usar a função remota para atualizar o banco de dados quando um item é verificado, e se livrar do botão atualizar completamente?

Uma vez que você pode incluir o ID para cada registro quando você cria seu formulário você vai querer o controlador para percorrer itens em que você postar, em seguida, localizar e atualizar cada um desses registros de acordo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top