2017-04-04 2 views
0

J'ai deux modèles: project et todo. Le projet a beaucoup de todos. Donc je veux créer un formulaire, où je sélectionne la catégorie de projet de la liste déroulante, puis j'y ajoute un todo. Par exemple: J'ai les catégories suivantes: famille, travail, étude.Création d'un formulaire pour un objet associé

En formulaire dans la liste déroulante, je sélectionne 'étudier', puis dans le champ de texte, j'épelle un todo comme 'faire les devoirs pour lundi' et appuyez sur le bouton Soumettre.

project.rb

class Project < ActiveRecord::Base 
    has_many :todos 
end 

todo.rb

class Todo < ActiveRecord::Base 

    belongs_to :project 

end 

mon schéma de données:

create_table "projects", force: :cascade do |t| 
    t.string "title" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "todos", force: :cascade do |t| 
    t.string "text" 
    t.boolean "isCompleted" 
    t.integer "project_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

_form.html.erb

<%= form_for @project do |f| %> 

    <div class="form_control"> 
    <%= f.select :title, options_for_select([["Work", "w"], 
              ["Family", "f"], 
              ["Study", "f"], 
              ["TheRest", "t"]]) %> 
    </div> 

    <div class="form_control"> 
    *** HERE I NEED TO FIGURE OUT HOW TO ADD SOME DATA TO todo.text *** 
    </div> 

    <div class="form_control"> 
    <%= f.submit 'Add' %> 
    </div> 
<% end %> 

voilà comment je montrer tous les projets avec leur todos:

<% @projects.each do |project| %> 
    <h2> <%= project.title %> </h2> 
    <% project.todos.all.each do |todo| %> 
     <p><%= todo.text %> <%= check_box('tag', todo.__id__, {checked: todo.isCompleted}) %></p> 
    <% end %> 
<% end %> 

lien GitHub: https://github.com/NanoBreaker/taskmanager

+0

Jetez un oeil à '' 'fields_for''' http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i- fields_for – ellitt

+0

Quel est le problème auquel vous êtes confronté? – shiladitya

Répondre

0

Dans votre formulaire de todo, vous pourriez avoir une boîte de sélection pour choisir le projet le todo appartient à:

# todos/_todo_form.html.erb 
    <%= select_tag "project_id", options_for_select(Project.pluck(:title, :id)) %> 

Et dans votre action todos_controller create:

def create 
    @project = Project.find(params[:project_id]) 
    @todo = @project.todos.new(todo_params) 
    if @todo.save 
    # success 
    else 
    # error 
    end 
end 

enfin, permettent la project_id en todo_params:

def todo_params 
    params.require(:todo).permit(:text, :project_id) # add any other attributes you want 
end