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:
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:
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!
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. –
Aktualisierter Beitrag, um mehr Details zu enthalten. – spacerobot