0

簡単なレールの todo リストを実行しています。関連する 2 つのモデルがListありTaskます。

List明らかにhas_many :tasks、私はjQueryのドラッグアンドドロップを使用して、リストの表示ビューで未完了のタスクの位置を並べ替え、ページの読み込み後に位置の順序を維持しようとしています 。

この問題は、lists.js.coffee に渡す URL にある可能性があると思います。

ドラッグアンドドロップ後の出力-

Started POST "/lists/1/tasks/sort" for 127.0.0.1 at 2012-11-04 11:08:37 -0800
Processing by TasksController#sort as */*
  Parameters: {"list_id"=>"1"}
  List Load (0.2ms)  SELECT "lists".* FROM "lists" WHERE "lists"."id" = ? LIMIT 1  [["id", "1"]]
  Rendered text template (0.0ms)
Completed 200 OK in 5ms (Views: 1.7ms | ActiveRecord: 0.2ms)

私のルート-

  resources :lists do
    resources :tasks do
      collection { post :sort }
    end
  end

私のlists.js.coffee-

jQuery ->
  $('#incomplete').sortable
    axis: 'y'
    update: ->
     $.post($(this).data('update-url'), $(this).sortable('serialize'))

私のタスクコントローラ -

class TasksController < ApplicationController
  before_filter :find_list
  respond_to :html, :js

  def index
    @task = List.tasks.incomplete.order("position")
  end

  def sort
    render nothing: true
  end

  def create
    @task = @list.tasks.new(params[:task])
    if @task.save
      flash[:notice] = "Task Created"
    else
      flash[:error] = "It just didn't happen for you"
    end

    respond_with @list
  end

  def complete
    @task = @list.tasks.find(params[:id])

    @task.update_attributes({ 
      completed: true
    })

    respond_with @list
  end

  private

  def find_list
    @list = List.find(params[:list_id])
  end
end

そして最後に、完了したタスクと未完了のタスクをレンダリングしているリストの表示ビュー -

<ul class="task-list" id="incomplete" data-update-url="<%= sort_list_tasks_url(@list)%>">
    <% @list.tasks.incomplete.each do |task| %> 
     <table class="table table-hover table-condensed">
       <tbody>
         <tr>
           <td>
            <li id="task-<%= task.id %>">
              <span class="task-description" id="description-<%= task.id %>">
                <%= image_tag task.user.gravatar_url, :class => "gravatar_index" %>
                <%= task.description %>
              </span>
              <span class="pull-left" id="completed_checkbox">
               <%= button_to "Completed", complete_task_path(@list.id,task.id), :class => "btn-mini", remote: true %>
              </span>
            </li>
          </td>
         </tr>
       </tbody>
      </table>
    <% end %>

私は1 つの faq モデルのみを処理するRbates チュートリアルに従ってきたので、両方で機能させる方法の接続がありません。数時間以上後、私は動けなくなりました。ご覧いただきありがとうございます。


[アップデート]

いくつかのロジックをリストコントローラーに移動し、リスト表示ビューをクリーンアップすることで進歩したと思います-

リストコントローラー-

  def show
    @list = List.find(params[:id])  
    @tasks = @list.tasks.incomplete.order("position")
  end

  def sort
    render nothing: true
  end

リストショービュー -

<ul class="task-list" id="incomplete" data-update-url="<%= sort_list_tasks_url %>">
    <% @tasks.each do |task| %> 
     <table class="table table-hover table-condensed">
       <tbody>
         <tr>
           <td>
            <%= content_tag_for :li, task do %>
              <span class="task-description" id="description-<%= task.id %>">
                <%= image_tag task.user.gravatar_url, :class => "gravatar_index" %>
                <%= task.description %>
              </span>
              <span class="pull-left" id="completed_checkbox">
               <%= button_to "Completed", complete_task_path(@list.id,task.id), :class => "btn-mini", remote: true %>
              </span>
            <% end %>
          </td>
         </tr>
       </tbody>
      </table>
    <% end %>
  </ul>

しかし、今私は

No route matches {:action=>"sort", :controller=>"tasks"}

エラーが発生し、理由がわかりません。update-data-url 属性には、実行中の rake ルートから直接取得した URL が含まれているため、このエラーが発生する理由がわかりません。

進歩していますが(と思います)、まだ立ち往生しています。

4

1 に答える 1

0

<ul>タグにupdate-urlのリストを追加することで解決できます。

data-update-url="<%= sort_list_tasks_url(@list) %>"
于 2013-03-19T18:44:13.337 に答える