2016-08-09 6 views
0

私はレールでシンプルなToDoリストアプリケーションを作成していると私は、次の問題があります:私はbelongs_toプロジェクト は、私は、テンプレート作成したことをタスク持っは、ルートルート・レールを変更することはできません

を - projects/show.html.erb とを私はそれが私のアプリのroot page、私はデバッガから見ることができるように設定することはできません - ルートは常にprojects#indexアクション

PS私はindexアクションでこのフォームを使用することはできませんルートページ原因であることを示している必要がある

<%= form_for [@project, @task],remote: true do |f| %> 
      <%= f.input :body,class: 'form-control' %> 
      <%= f.submit 'Add task', class: 'btn' %> 
     <% end %> 

プロジェクトコントローラ

class ProjectsController < ApplicationController 
    before_action :load_project, only: [:show, :edit, :update, :destroy] 
    before_action :authenticate_user! 

    def index 
     @projects = current_user.projects unless current_user.nil? 
     end 

     def show 
     @task = @project.tasks.new 
     end 

     def new 
     @project = current_user.projects.new 
     end 

     def edit 
     end 

     def create 
     @project = current_user.projects.create(project_params) 

     if @project.save 
      redirect_to root_path 
     else 
      render :new 
     end 
     end 

     def update 
     if @project.update(project_params) 
      redirect_to @project 
     else 
      render :edit 
     end 
     end 

     def destroy 
     @project.destroy 
     redirect_to projects_path 
     end 

     private 

    def load_project 
     begin 
     @project = Project.find(params[:id]) #raises an exception if project not found 
     rescue ActiveRecord::RecordNotFound 
     redirect_to projects_path 
     end 
    end 

     def project_params 
     params.require(:project).permit(:name, :user_id) 
     end 

end 

routes.rbを

Rails.application.routes.draw do 
    devise_for :users, :controllers => { :omniauth_callbacks => "callbacks" } 
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 
    root 'projects#index' 


    resources :projects do 
    resources :tasks 
    end 




end 

そして、 レーキルートによって生成されるルート

todo$ rake routes 
          Prefix Verb  URI Pattern         Controller#Action 
       new_user_session GET  /users/sign_in(.:format)      devise/sessions#new 
        user_session POST  /users/sign_in(.:format)      devise/sessions#create 
      destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy 
user_facebook_omniauth_authorize GET|POST /users/auth/facebook(.:format)     callbacks#passthru 
user_facebook_omniauth_callback GET|POST /users/auth/facebook/callback(.:format)  callbacks#facebook 
        user_password POST  /users/password(.:format)      devise/passwords#create 
       new_user_password GET  /users/password/new(.:format)     devise/passwords#new 
       edit_user_password GET  /users/password/edit(.:format)     devise/passwords#edit 
           PATCH /users/password(.:format)      devise/passwords#update 
           PUT  /users/password(.:format)      devise/passwords#update 
     cancel_user_registration GET  /users/cancel(.:format)      devise/registrations#cancel 
       user_registration POST  /users(.:format)        devise/registrations#create 
      new_user_registration GET  /users/sign_up(.:format)      devise/registrations#new 
      edit_user_registration GET  /users/edit(.:format)       devise/registrations#edit 
           PATCH /users(.:format)        devise/registrations#update 
           PUT  /users(.:format)        devise/registrations#update 
           DELETE /users(.:format)        devise/registrations#destroy 
          root GET /           home#index 
        project_tasks GET  /projects/:project_id/tasks(.:format)   tasks#index 
           POST  /projects/:project_id/tasks(.:format)   tasks#create 
       new_project_task GET  /projects/:project_id/tasks/new(.:format)  tasks#new 
       edit_project_task GET  /projects/:project_id/tasks/:id/edit(.:format) tasks#edit 
        project_task GET  /projects/:project_id/tasks/:id(.:format)  tasks#show 
           PATCH /projects/:project_id/tasks/:id(.:format)  tasks#update 
           PUT  /projects/:project_id/tasks/:id(.:format)  tasks#update 
           DELETE /projects/:project_id/tasks/:id(.:format)  tasks#destroy 
         projects GET  /projects(.:format)       projects#index 
           POST  /projects(.:format)       projects#create 
        new_project GET  /projects/new(.:format)      projects#new 
        edit_project GET  /projects/:id/edit(.:format)     projects#edit 
         project GET  /projects/:id(.:format)      projects#show 
           PATCH /projects/:id(.:format)      projects#update 
           PUT  /projects/:id(.:format)      projects#update 
           DELETE /projects/:id(.:format)      projects#destroy 
+0

なぜルートディレクトリを変更する必要がありますか?ルート_ルートを変更したいのですか? Railsは静的サーバーではありません。ルートディレクトリは、どのファイルがレンダリングされるかには影響しません。とにかく、プロジェクトのテンプレートが '/'に表示されるようにするには、このルートを使います: 'root 'projects#show''しかし、あなたのshowメソッドは自動的には提供されない' project_id'パラメータを必要とします。 –

+0

よく私のrutes.rbにタイプミスがありました - 私はそれを修正しました。しかし、 '/'は私がこのフォームでエラーを取得するプロジェクト#indexにまだリダイレクトされます(私はindexアクション。私の知る限り) – Mikhah

答えて

1

なぜインデックスを表示ページにしますか?さて、どうやってそれをすることができますか? showアクションを実行するには、特定のプロジェクトをユーザーに表示できるようにコントローラーにidを渡す必要があります。ユーザーが/をリクエストしているときに、どのようにidを渡すことができますか?

それは意味がありますか?

indexページにルートを残すことをお勧めします。インデックスビューで、各プロジェクトをショーページにリンクします。インデックスページにネストされたフォームを持つ必要はありません。

また、すべてのプロジェクトとタスクをルートページに表示する場合は、indexビューを変更して、各プロジェクトのタスクをループします。

@projects.each do |project| 
    # display project's information 
    project.tasks.each do |task| 
    # display the task information 
    # display a new task button 
    end 
end 

しかし、質問したようにネストされたフォームを表示することはできません。フォームに@project@taskが必要なので、index actionで判断できません。 「新しいタスク」にremote: trueを追加してから、フォームをモーダルで表示するためにJSレスポンスをトリガーすることができます。

これはあなたに新しい聞こえる場合は、参照してください。https://launchschool.com/blog/the-detailed-guide-on-how-ajax-works-with-ruby-on-rails

あなたのRailsアプリケーションにAJAXを使用してこれを歩いていきます。

希望すると便利です。

+0

アプリケーションはプロジェクトとそのタスクのページのように見えるので、他のページへのリンクを作成することはできません – Mikhah

+0

すべてのプロジェクトとそのタスクをルートページに表示しますか? –

+0

はい、ユーザーサインインした後、彼はすべてのタスクを含むすべてのプロジェクトを見て、フォームを介してプロジェクトにタスクを追加することができます – Mikhah

関連する問題