4

私はレールに次のモデルを持っています:

class Task < ActiveRecord::Base
  attr_accessible :description, :name, :project
  belongs_to :project

  validates :name, :presence => true

end

class Project < ActiveRecord::Base
  attr_accessible :name
  has_many :tasks
end

使用可能なプロジェクトをリストするビューがあります プロジェクトのいずれかをクリックすると、クリックしたプロジェクトのすべてのタスクをリストするページが開きます。問題は、プロジェクト ID をどのように渡すかです。その後、プロジェクトIDを多くのコントローラーで表示できるようにしたいので、セッション変数などを使用する必要があると思いますか?

4

3 に答える 3

3

ネストされたリソースを使用したい

ルート.rb

resources :project do
  resources :tasks
end

これにより、次のことが可能になります<%= link_to 'Tasks', tasks_project_path(@project) %>

次に、タスク用のコントローラーがあり、パラメーターには :project_id が含まれます/projects/:project_id/tasks

次に、コントローラーで:

class TasksController < ApplicationController
  def index
    @project = Project.find(params[:project_id])
    @tasks = @project.tasks
  end
end
于 2013-03-27T17:44:41.090 に答える
2

次のようにできます。

 <%= link_to 'Get tasks of project', {:controller => :tasks, :action => :list_project_tasks}, :params => {:project_id => project.id} %>

ここlist_project_tasksにアクションがありますtasks_controller

 def list_project_tasks
    @project_tasks = Project.find(params[:id]).tasks
 end

または:

あなたはあなたを変更することができindexますtasks_controller:

<%= link_to 'Get tasks of project', {:controller => :tasks, :action => :index}, :params => {:project_id => project.id} %>

def index
  @tasks = Project.find(params[:project_id]).try(:tasks) || Task.all
end
于 2013-03-27T17:41:16.667 に答える
0

1) プロジェクトのいずれかをクリックすると、クリックしたプロジェクトのすべてのタスクを一覧表示するページが開きます。- これを行うには、Rails が提供する link_to ヘルパーを使用し、Rails ルーティングを介してアイテムにリンクすることをお勧めします。たとえば、ビューにすべてのプロジェクトが一覧表示され、各プロジェクト アイテムは<%= link_to project.name, @project %>またはを使用して表示されます。<%= link_to project.name, project_path(@project) %>

コマンド ラインで rake routes と入力すると、ルートのリストを表示できます。

2) 正確な意味はわかりませんが、使用している URL が /projects/12/ のようなものである場合、以下のリソースとそのコントローラー (/projects/12/tasks/15 など) は project_id に次のようにアクセスできます。 params[:project_id]、ルートがネストされたルートとして設定されていると仮定します。

于 2013-03-27T17:42:18.133 に答える