3

次のようなルートがあります。

resources :projects do
  resources :tasks
end

これにより、URL/projects/14/tasks/3 のような URL が得られます。

モデルは次のことを定義します。

project has_many :tasks
task belongs_to :project

現在、ユーザーがタスクへのリンクをクリックすると、プロジェクトの表示ビュー内からリモート => true リンクを介して、tasks#show を div にロードしています。これはうまくいっています。

#tasks/show.js.erb

$('#task_content').html("<%= j render(partial: 'tasks/single', locals: { t: @task }) %>");

#tasks/_single.html.erb

<%= t.content %>

問題は、ユーザーが URL/projects/14/tasks/3 にアクセスして、タスクをプロジェクト ビューの div に自動的にロードできるようにすることです。

基本的には、URL/projects/14/tasks/3実際に renderURL/projects/14して jquery を呼び出す方法を見つける必要があります$('a#task_<%= task.id %>').click()

ビューにこの種の動作を認識させる方法を理解できないようです。誰かが私を正しい方向に向けることができますか?

ありがとう!!!

編集

#TasksController
  def show
    @task = Task.find(params[:id])
    respond_to do |format|
      format.js
    end
  end


#ProjectsController
  def show
    @project = Project.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
    end
  end

Projects#show には 2 つの主要な要素があります。

  1. task_<%= task.id %> の ID を持つリンク
  2. タスク コンテンツをロードする div (div#task_content)
4

2 に答える 2

1

私はおそらくRailsルーティング制約を使用してxhrリクエストをタスクコントローラーに送信し、タスクIDをパラメーターとしてプロジェクトコントローラーにhttpリクエストを送信し、その変数をビューで使用できるようにします。その後、ビューでタスク変数かどうかを確認できます。存在し、divをロードしますか?または、おそらくJSでURLを調べます。

次のようなもの:

match "/projects/:id/tasks/:tid", :to => "projects#show", :constraints => lambda { |request| !request.xhr? }
match "/projects/:id/tasks/:tid", :to => "tasks#show", :constraints => lambda { |request| request.xhr? }

テストされていませんが、動作する可能性がありますか?

于 2013-01-02T16:13:01.233 に答える
1

基本的に、URL/projects/14/tasks/3 が実際に URL/projects/14 をレンダリングし、jquery $('a#task_<%= task.id %>').click( を呼び出す方法を見つける必要があります。 )

タスクが標準の HTTP 呼び出し (非 AJAX) によって到達されたかどうかをテストし、プロジェクトの URL にリダイレクトして、ロード時にタスクを自動ロードするパラメーターを渡すことができます。デフォルトのケースではjsフォーマットを使用しているため、さらに簡単htmlです。フォーマットをテストするだけです。

#TasksController
def show
  @task = Task.find(params[:id])
  respond_to do |format|
    format.html { redirect_to project_path(@task.project_id, :load_task_id => @task.id) }
    format.js
  end
end

# somewhere in /projects/show partial
<% if params[:load_task_id] %>
  <script type="text/javascript">
    $(function(){
      $('a#task_<%= params[:load_task_id] %>').click()
    });
  </script>
<% end %>
于 2013-01-02T15:38:59.937 に答える