Rails 在引导模式中添加新表单和编辑表单
Posted
技术标签:
【中文标题】Rails 在引导模式中添加新表单和编辑表单【英文标题】:Rails add new and edit form in bootstrap modal 【发布时间】:2017-08-06 04:08:16 【问题描述】:我是 Ruby on Rails 的新手。现在我正在尝试使用引导程序制作一个简单的 ToDo List 应用程序。
一切正常,但我试图将我的新任务表单呈现到模式窗口,但它崩溃了。这是我的 _form 部分代码:
<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">×</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
。
我的代码有什么问题?以及如何将现有任务传递给表单以进行编辑操作?
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
【问题讨论】:
你的 task_controller 说什么?更好的是,你的 task_controller 里有什么? 您还需要在索引操作中添加@task = Task.new。 您正在尝试访问索引文件中的新任务表单,因此@task = Task.new 必须在您的索引方法中。 【参考方案1】:form_for
中的 @task
变量不能是 nil
或 []
。
您可以“破解” Rails 行为并像这样明确声明您的表单:
<%= form_for Task.new, :html => class:"form-horizontal" do |f| %>
...
但这不是使用form_for
的“正确”方式,也不是使用 Rails,因为您不会遵循 MVC 模式,因此,从控制器到视图的实例变量,不能直接在查看。
由于我在tasks_controller
中看不到您的方法中的内容,可能您忘记将Task.new
值设置为@task
变量,请尝试将其设置为:
class Task < ApplicationController
def index
@task = Task.new
...
end
end
希望对你有帮助。
编辑:您正在尝试访问索引文件中的新任务表单,因此@task = Task.new
必须在您的索引方法中。
【讨论】:
是的,我现在的方法是 def new @task=Task.new end【参考方案2】:错误消息指定第一个参数,即@task 为 nil。
所以改变你的控制器代码
def index
@task = Task.new
@tasks = Task.all
end
def edit
@task = Task.find(params[:id])
end
【讨论】:
以上是关于Rails 在引导模式中添加新表单和编辑表单的主要内容,如果未能解决你的问题,请参考以下文章