2017-08-04 1 views
0

Ich bin neu in Schienen und ich baue eine Todo-Liste App. Ich versuche, es einzurichten - wie Trello, damit ich mehrere Listen ausgeben kann und unter jeder Liste Elemente habe. Zur Zeit kann ich Listen erstellen und in jeder Liste Listenelemente erstellen. Alles funktioniert, indem der Player zwischen den verschiedenen Seiten eingefügt wird, aber ich versuche, alles auf einer Seite zusammenzufassen.Rails übergeben ID-Param durch Formular

Hier ist ein Mock-up Bild von dem, was ich mit jeder Liste zu bekommen versuche:

Mock up of Final for Each list

ich meistens haben sie arbeiten. Ich kann neue Listen erstellen und sie erscheinen automatisch auf der Seite. Wenn ich Elemente hinzufüge, erscheinen die Elemente unter jeder Liste. Hier ist ein Bild von dem, was ich bisher:

Current Progress

Das letzten Stück, das ich mit einem Problem habe, wozu auch die Fähigkeit, Listenelemente erstellen direkt in der Index-Seite aus jeder Liste. Wenn Sie sich das obige Mock-Up-Bild ansehen, befindet sich oben auf der Liste ein Textfeld. Ich möchte dasselbe machen und ein neues Element für diese Liste erstellen.

Ich erhalte diesen Fehler "NoMethodError in TodoLists # index". Ich verstehe, warum es Fehler gibt, da die Indexaktion nicht über todo_items weiß, aber nicht herausfinden kann, wie es funktioniert.

Hier ist meine Seite Index Seite, wo ich alles passieren soll aus:

   <div class="row wrapper border-bottom white-bg page-heading"> 

     <div class="col-lg-10"> 
     <h2>Todo Lists</h2> 
     <ol class="breadcrumb"> 
      <li> 
      <a href="index.html">Home</a> 
      </li> 
      <li> 
      <a>Todo Lists</a> 
      </li> 
      <li class="active"> 
      <strong>Lists</strong> 
      </li> 
     </ol> 
     </div> 
     <div class="col-lg-2"></div> 
    </div> 

    <div class="wrapper wrapper-content animated fadeInRight"> 

     <div class="row"> 
     <div class="col-md-4"> 
      <div id="nestable-menu"> 
      <%= link_to "Create New List", new_todo_list_path, :class => "btn btn-white btn-sm" %> 

      </div> 
     </div> 
     </div> 
     <div class="row"> 
     <% @todo_lists.each do |todo_list| %> 

     <div class="col-lg-4"> 
      <div class="ibox"> 
      <div class="ibox-content"> 
       <h3><%= link_to todo_list.title, todo_list %> 
       - 
       <span class="small"><%= todo_list.description %></span> 
       </h3> 
       <p class="small"> 
       <i class="fa fa-hand-o-up"></i> 
       Drag task between list</p> 

       <div class="input-group"> 

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

       </div> 

       <ul class="sortable-list connectList agile-list" id="todo"> 
       <%= todo_list.todo_items.each do |todo_items| %> 
       <li class="warning-element" id="task1"> 

        <%= todo_items.content %> 

        <div class="agile-detail"> 

        <%= link_to "Delete", todo_list_todo_item_path(todo_list, todo_items.id), :class=>"pull-right btn btn-xs btn-danger", method: :delete, data: { confirm: "Are you sure?" } %> 
        <i class="fa fa-clock-o"></i> 
        <%= todo_items.created_at.strftime('%m/%d/%Y %I:%M %p') %> 
        </div> 
       </li> 
       <% end %> 
       </ul> 
      </div> 
      </div> 
     </div> 
     <% end %> 
     </div> 
    </div> 

todo_lists_controller:

 class TodoListsController < ApplicationController 
     before_action :set_todo_list, only: [:show, :edit, :update, :destroy] 

     # GET /todo_lists 
     # GET /todo_lists.json 
     def index 
     @todo_lists = TodoList.all 
     end 

     # GET /todo_lists/1 
     # GET /todo_lists/1.json 
     def show 

     end 

     # GET /todo_lists/new 
     def new 
     @todo_list = TodoList.new 
     end 

     # GET /todo_lists/1/edit 
     def edit 
     end 

     # POST /todo_lists 
     # POST /todo_lists.json 
     def create 
     @todo_list = TodoList.new(todo_list_params) 

     respond_to do |format| 
      if @todo_list.save 
      format.html { redirect_to @todo_list, notice: 'Todo list was successfully created.' } 
      format.json { render :show, status: :created, location: @todo_list } 
      else 
      format.html { render :new } 
      format.json { render json: @todo_list.errors, status: :unprocessable_entity } 
      end 
     end 
     end 

     # PATCH/PUT /todo_lists/1 
     # PATCH/PUT /todo_lists/1.json 
     def update 
     respond_to do |format| 
      if @todo_list.update(todo_list_params) 
      format.html { redirect_to @todo_list, notice: 'Todo list was successfully updated.' } 
      format.json { render :show, status: :ok, location: @todo_list } 
      else 
      format.html { render :edit } 
      format.json { render json: @todo_list.errors, status: :unprocessable_entity } 
      end 
     end 
     end 

     # DELETE /todo_lists/1 
     # DELETE /todo_lists/1.json 
     def destroy 
     @todo_list.destroy 
     respond_to do |format| 
      format.html { redirect_to root_url, notice: 'Todo list was successfully destroyed.' } 
      format.json { head :no_content } 
     end 
     end 

     private 
     # Use callbacks to share common setup or constraints between actions. 
     def set_todo_list 
      @todo_list = TodoList.find(params[:id]) 
     end 



     # Never trust parameters from the scary internet, only allow the white list through. 
     def todo_list_params 
      params.require(:todo_list).permit(:title, :description) 
     end 
    end 

todo_items_controller:

   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 



       def destroy 
        if @todo_item.destroy 
         flash[:success] = "Todo List item was deleted." 
        else 
         flash[:error] = "Todo List item could not be deleted." 
        end 
        redirect_to @todo_list 
       end 

       def complete 
        @todo_item.update_attribute(:completed_at, Time.now) 
        redirect_to @todo_list, notice: "Todo item completed" 
       end 

       private 

       def set_todo_list 
        @todo_list = TodoList.find(params[:todo_list_id]) 
       end 

       def set_todo_item 
        @todo_item = @todo_list.todo_items.find(params[:id]) 
       end 

       def todo_item_params 
        params[:todo_item].permit(:content) 
       end 

      end 

Routen:

resources :todo_lists do 
    resources :todo_items do 
     member do 
      patch :complete 
      end 
    end 
    end 

Jede Hilfe wird geschätzt!

+0

Könnten Sie betonen in dem, was Sie wollen und was ist der Fehler, Sie bekommen ?, können die Schienen-Server geben Sie die meisten detaillierte Nachricht. –

+0

Aktualisierter Beitrag, um mehr Details zu enthalten. – spacerobot

Antwort

1

Ich landete es funktioniert! Wechsel war alles, was ich am Ende zu tun hatte:

<%= form_for([@todo_list, @todo_list.todo_items.build]) do |f| %> 

zu

<%= form_for([todo_list, TodoItem.new],:remote => true) do |f| %> 
Verwandte Themen