轨道待办事项列表隐藏创建列



我在todo_list表单中添加标题和描述,然后将内容添加到todo_item表单中。但是我想在我创建的todo_item的每一行的标题字段中注册todo_list标题字段。如何在控制器端提供此功能?

class TodoItemsController < ApplicationController
  before_action :set_todo_list
  before_action :set_todo_item, except: [:create]
  def create
      @todo_item = @todo_list.todo_items.create(todo_item_params)
      redirect_to @todo_list
  end  
end

todo_item模型

class TodoItem < ActiveRecord::Base
 belongs_to :todo_list
 def completed?
  !completed_at.blank?
 end
end

todo_list模型

class TodoList < ActiveRecord::Base
   has_many :todo_items
end

todo_item分贝

class CreateTodoItems < ActiveRecord::Migration
  def change
   create_table :todo_items do |t|
     t.string :title
     t.string :content
     t.references :todo_list, index: true
     t.timestamps
   end
  end
end

待办事项列表数据库

class CreateTodoLists < ActiveRecord::Migration
  def change
    create_table :todo_lists do |t|
      t.string :title
      t.text :description
      t.timestamps
    end
  end
end

待办事项列表 _form.html.erb

<%= form_for(@todo_list) do |f| %>
   <% if @todo_list.errors.any? %>
     <div id="error_explanation">
       <h2><%= pluralize(@todo_list.errors.count, "error") %> prohibited 
 this todo_list from being saved:</h2>
       <ul>
       <% @todo_list.errors.full_messages.each do |message| %>
         <li><%= message %></li>
       <% end %>
       </ul>
     </div>
   <% end %>
   <div class="field">
     <%= f.label :title %><br>
     <%= f.text_field :title %>
   </div>
   <div class="field">
     <%= f.label :description %><br>
     <%= f.text_area :description %>
   </div>
   <div class="actions">
     <%= f.submit %>
   </div>
  <% end %>

待办事项 _form.html.erb

<%= form_for([@todo_list, @todo_list.todo_items.build]) do |f| %>
    <%= f.text_field :content, placeholder: "New Todo" %>
    <%= f.submit %>
<% end %>

待办事项 _todo_item_html.erb

<div class="row clearfix">
     <% if todo_item.completed? %>
         <div class="complete">
             <%= link_to complete_todo_list_todo_item_path(@todo_list, 
 todo_item.id), method: :patch do %>
                 <i style="opacity: 0.4;" class="fa fa-check"></i>
             <% end %>
         </div>
         div class="todo_item">
             <p style="opacity: 0.4;"><strike><%= todo_item.content %>
 </strike></p>
         </div>
         <div class="trash">
             <%= link_to todo_list_todo_item_path(@todo_list, todo_item.id), 
 method: :delete, data: { confirm: "Are you sure?" } do %>
            <i class="fa fa-trash"></i>
             <% end %>
         </div>
     <% else %>
         <div class="complete">
             <%= link_to complete_todo_list_todo_item_path(@todo_list, 
 todo_item.id), method: :patch do %>
                 <i class="fa fa-check"></i>
             <% end %>
         </div>
         <div class="todo_item">
             <p><%= todo_item.content %></p>
         </div>
         <div class="trash">
             <%= link_to todo_list_todo_item_path(@todo_list, todo_item.id), 
 method: :delete, data: { confirm: "Are you sure?" } do %>
                 <i class="fa fa-trash"></i>
             <% end %>
         </div>
     <% end %>
 </div>

我想这就是你想做的,将其添加到您的ToDoItem模型中。

before_create :set_title
def set_title
  self.title = todo_list.title
end

希望对您有所帮助。


根据评论中的要求进行更新。

更新

父项时更新子项。

在您的TodoList模型中,

before_save :update_todo_item_titles
def update_todo_item_titles
  todo_items.update_all(title: title) if title_changed?
end

相关内容

  • 没有找到相关文章

最新更新