在我的应用程序中有一个用户模型和一个任务模型。用户可以创建任务并对其进行管理。但现在我希望用户能够在一个页面上填写多个任务的形式。
tasks_controller.rb
class TasksController < ApplicationController
before_action :find_task, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!
def new
@task = current_user.tasks.build
end
def create
@task = current_user.tasks.build(task_params)
if @task.save
redirect_to @task, notice: "Task erstellt"
else
render 'new'
end
end
def edit
end
def update
if @task.update(task_params)
redirect_to @task
else
render 'edit'
end
end
def destroy
@task.destroy
redirect_to root_path, notice: "Task gelöscht"
end
def show
end
def index
@tasks = Task.all.order("created_at DESC")
end
private
def task_params
params.require(:task).permit(:name, :description, :urgency, :importance, :time)
end
def find_task
@task = Task.find(params[:id])
end
end
new.html.haml
- 6.times do
= form_for @task do |t|
= t.text_field :name
%br
= t.text_area :description
%br
= t.text_field :urgency
%br
= t.text_field :importance
%br
= t.text_field :time
%br
= t.submit "Bestätigen"
但这并没有令人沮丧。我收到以下错误:
任务中的ArgumentError#new
显示C:/Sites/taskr4/app/views/tasks/new.html.haml第13行引出:错误的参数数量(0表示1..2)
Rails.root:C:/ Sites / taskr4应用程序跟踪|框架跟踪|完整追踪 app / views / tasks / new.html.haml:13:in
block in >_app_views_tasks_new_html_haml__991073273_86859300' app/views/tasks/new.html.haml:1:in
次&#39; app / views / tasks / new.html.haml:1:in&gt;`_app_views_tasks_new_html_haml__991073273_86859300&#39;
答案 0 :(得分:2)
你的异常回溯是什么?从你的帖子,我认为应该有任何错误。
顺便说一句,如果您想创建或编辑多个任务,请查看http://railscasts.com/episodes/198-edit-multiple-individually。
<% form_tag create_multiple_tasks_path, :method => :put do %>
<% 6.times do %>
<% fields_for "tasks[]", Task.new do |f| %>
<h2><%=h task.name %></h2>
<%= render "fields", :f => f %>
<% end %>
<% end %>
<p><%= submit_tag "Submit" %></p>
<% end %>
def create_multiple
@tasks = params[:tasks].map do |task_params|
Project.new(task_params).save
# TODO: add validate and error messages.
end
end
答案 1 :(得分:0)
在没有重新设计控制器和视图的情况下,Rails没有简单的方法可以将同一个独立模型多次实例化。但是,如果您的用户模型has_many :tasks
,那么您可以利用嵌套的表单/属性来创建可以向用户添加多个任务的表单。
有几个宝石使这个微不足道。例如,您可能希望了解使用cocoon gem可以执行的操作。
但是,如果你真的想要一个独立的表单来实现几个任务,例如。对于不同的用户,那么我担心你会有额外的工作,这并不容易弄明白。基本上,您需要在控制器中定义new_multiple
和create_multiple
个动作,并弄清楚如何编写HTML视图,以便在POST时将参数解释为一系列任务。即你希望params[:tasks]
在你的控制器中返回一个数组,所以你可以做params[:tasks].each {|task_params| Task.create(task_params) }