2016-02-27 68 views
0

我很新的rails和試圖創建一個應用程序由我自己的待辦事項列表。如何通過form_for傳遞參數時涉及多個模型

如何在下面的表格中傳遞參數「類別名稱」和「任務描述」。

用戶/顯示/ html.erb

<aside class="col-md-8"> 
    <section> 
    <%= render 'tasks/new' %><br> 
    </section> 
    <section> 
    <% if @user.tasks.any? %> 
     <ol class="tasks"> 
     <%= render @tasks %> 
     </ol> 
    <% end %> 
    </section> 
</aside> 

任務/ new.html.erb

<div class="form-inline"> 
    <%= form_for([@user, @user.tasks.build]) do |f| %>  
     <select id="selectUser" class="form-control selectWidth"> 
     <option class="">Select Category</option> 
      <% @user.categories.all.each do |category| %> 
      <option class=""> 
       <%= category.name %> 
      </option> 
      <% end %> 
     </select>    
     <%= f.label :description %> 
     <%= f.text_area :description, class: 'form-control' %>  
     <%= f.submit %> 
    <% end %> 
</div> 

控制器/ tasks_controller

class TasksController < ApplicationController 

def create 
    @user = User.find(params[:id]) 
    @category = Category.find_by(name: params[:category]) 

    @task = @user.tasks.create(task_params) 
    redirect_to user_path(@user) 
end 

private 

    def task_params 
    params.require(:task).permit(@category.name, :description) 
    end 

end 

柱從任務表是

  1. ID
  2. 描述
  3. USER_ID(與用戶表參考)
  4. CATEGORY_ID(帶類別表參考)

柱從類別表是:

  1. ID
  2. user_id(引用用戶表)

我試圖從新的任務形式傳遞參數是從categorynamedescriptiontasks

回答

0

我猜你要分類的任務而不是用戶。所以首先你應該在類別表中擺脫user_id

應該有3個表將類別連接到任務。任務,類別和TaskCategories將這些表與has_many:through關係連接到2.8(這裏選擇has_many到version)http://guides.rubyonrails.org/association_basics.html這兩種方式。

然後,您可以在控制檯或窗體中手動創建類別。我想你想確定的類別和用戶可以選擇這些,所以我建議控制檯或seeds.rb。下面是創建類的實例:

Category.create!([{name: "IoT"}, {name: "AI"}, {name: "FinTech"}, {name: "Automotive"}, {name: "Health & Welness"}, {name: "IT & Data Science"}, {name: "FinTech"}, {name: "Education"}, {name: "Retail"}]) 

一旦這些都在數據庫和表之間的連接設置(在數據庫外鍵和協會的型號),你可以在任務形式使用:

<div class="form-group"> 
    <%= f.collection_select :category_ids, Category.all.order(name: :asc), :id, :name, {}, { multiple: true } %> #with multiple you can choose more at once 
</div> 

不要忘記在任務模式的強烈PARAMS:

....category_ids: []... #with plural you can choose more at once 

回答你的最後一句話:你給集合中的名字選擇,但你通過category_id cuz TaskCategories表沒有category.name,因爲它在類別表中。task.description很容易,因爲這是一個任務表單,所以你不應該有任何問題,只是不要忘記在任務強參數中使用:description

P.S.你可以使用的simpy form_for @task並把這個到你的控制器:

def new 
    @task = Task.new 
end 

def create 
    @task = current_user.tasks.new(task_params) 
end 
+0

我想類別的任務,同時我想類別鏈接到用戶(每個用戶應該能夠創建自己的類別)。我將tasks控制器中的create action改爲'tasks/_new.html.erb'中的'@task = current_user.tasks.new(task_params)'形式爲'<%= form_for([@ user,@ user.tasks。 build])do | f | %>'現在我沒有收到任何錯誤,但它沒有創建新任務 – Trishj

+0

你在日誌中看到什麼?我仍然沒有真正得到你想要的類別。你能告訴我一個例子嗎? –

+0

我想我錯過了@ @ task.save'命令。我現在能夠創建新的任務。我正在使用應用中的類別來分類「待辦事項」或「購物」等任務。 – Trishj