1

Ruby on Rails를 처음 사용했습니다. 이제 부트 스트랩으로 간단한 ToDo List 앱을 만들려고합니다.레일즈가 부트 스트랩 모달에 새롭게 추가 된 폼을 편집합니다.

모든 것이 작동하지만 새 작업 양식을 모달 창에 렌더링하려했으나 충돌이 발생했습니다. 여기

<div id="myModal" class="modal fade" role="dialog"> 
    <div class="modal-dialog"> 
     <!-- Modal content--> 
     <div class="modal-content"> 
     <div class="modal-header"> 
      <button type="button" class="close" data-dismiss="modal">&times;</button> 
      <h4 class="modal-title">Modal Header</h4> 
     </div>  
     </div> 
     <div class="modal-body"> 
      <h1>New Task</h1> 
      <%= form_for @task, :html => {class:"form-horizontal"} do |f|%> 
      <!-- Here is form code --> 
      <% end %> 
      <%= link_to 'Back', tasks_path %> 
     </div> 
     <div class="modal-footer"> 
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
     </div> 
     </div> 
    </div> 

그리고 내 Index.html.erb입니다 : 내 인덱스 페이지를 시작하려고 할 때

<div class="container-fluid"> 
    <div class="row"> 
     <h1 class="text-left">Task List</h1> 
     <%= button_to 'New Task', new_task_path, :class =>"btn btn-success pull-right", :method => "get", data: {'data-toggle' => "modal", 'data-targe' => "#myModal"} %> 
    </div> 
    <div class="row button-margin "> 
    <% @tasks.each do |task| %> 
      <div class="panel <%= task_status(task) %>"> 
       <div class="panel-heading"> 
        <%= task.title %> 
        <p class="pull-right"><%= task.dueDate %></p> 
       </div> 
       <div class="panel-body">  
        <h3><%= task.body %></h3> 
       </div> 
      </div> 
     <% end %> 
    </div> 

    <%= render "tasks/form" %> 
</div> 

그래서 나는 오류 First argument in form cannot contain nil or be empty를 얻을 여기 내 _form 부분 코드입니다.

내 코드가 뭐니? 그리고 편집 작업을 위해 양식에 기존 작업을 어떻게 전달할 수 있습니까?

UPD : 작업 컨트롤러의 새로운 작업에 대한

방법은 다음과 같습니다에

class TasksController < ApplicationController 
    def index 
     @tasks=Task.all 
    end 

    def new 
     @task=Task.new 
    end 

    def show 
     @task=Task.find(params[:id]) 
    end 

    def create 
     @task=Task.new(task_params) 
     if @task.save 
      redirect_to @task 
     else 
      render 'new' 
     end 
    end 

    private 
     def task_params 
      params.require(:task).permit(:title, :body, :creationDate, :dueDate) 
     end 
end 
+1

?, 더 나은, 변경? –

+1

인덱스 작업에 @task = Task.new도 추가해야합니다. – puneet18

+1

색인 파일에서 새 작업 양식에 액세스하려고하므로 @task = Task.new가 색인 방법에 있어야합니다. –

답변

1

@task 변수 당신 form_fornil[] 수 없습니다. 때문에 같으면,

<%= form_for Task.new, :html => {class:"form-horizontal"} do |f| %> 
... 

그러나 form_for를 사용할 수 없으며, 레일을 사용하는 "올바른"방법이없는 것 :

당신은 레일 행동을 "해킹"을 명시 적으로 다음과 같은 양식을 선언 할 수 MVC 패턴을 따르므로 컨트롤러에서보기로의 인스턴스 변수는보기에 직접 나타나지 않습니다.

class Task < ApplicationController 

    def index 
    @task = Task.new 
    ... 
    end 
end 

는 희망이 도움이 : 나는 tasks_controller에있는 당신의 방법에 무엇이 볼 수 있듯이

는, 어쩌면 당신은 그것을 설정을 시도, 당신의 @task 변수에 Task.new 값을 설정하는 것을 잊었다했습니다.

EDIT : 인덱스 파일에서 새 작업 양식에 액세스하려고하므로 @task = Task.new이 색인 방법에 있어야합니다.

+0

Yeap, 내 방법은 지금 \t def new @ task = Task.new end – Gleb

+0

입니다. 따라서 문제에 관련된 파일을 추가하여 자세한 정보를 얻으십시오. –

1

오류 메시지는 첫 번째 인수 즉 @task가 nil임을 지정합니다.

그래서 task_controller에 무엇이 컨트롤러 코드 당신의 task_controller 말한다 무엇

def index 
    @task = Task.new 
    @tasks = Task.all 
end 

def edit 
    @task = Task.find(params[:id]) 
end