2017-04-04 51 views
0

对象创建表单我有两个型号:项目和待办事项。项目有很多待办事项。对于具有关联

所以我想创建一个表单,在这里我选择从ComboBox项目类别,然后我一个待办事项添加到它。

例如: 我有如下几类:家庭,工作,学习。

在组合框中形式我选择“学习”,然后在文本框我拼像“让周一功课”,然后按待办事项提交按钮。

project.rb

class Project < ActiveRecord::Base 
    has_many :todos 
end 

todo.rb

​​

我的数据模式:

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 %> 

我这是怎么显示所有与他们的待办事项项目:

<% @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 %> 

GitHub的链接:https://github.com/NanoBreaker/taskmanager

+0

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

+0

问题是什么,你所面对? – shiladitya

回答

0

在待办事项的形式,你可以有一个选择框,选择待办事项所属的项目:

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

而在你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 

最后,允许project_idtodo_params

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