ruby on rails 4 - 一页上同一型号的多种形式

时间:2016-02-21 12:19:28

标签: ruby-on-rails ruby ruby-on-rails-4

在我的应用程序中有一个用户模型和一个任务模型。用户可以创建任务并对其进行管理。但现在我希望用户能够在一个页面上填写多个任务的形式。

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;

2 个答案:

答案 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_multiplecreate_multiple个动作,并弄清楚如何编写HTML视图,以便在POST时将参数解释为一系列任务。即你希望params[:tasks]在你的控制器中返回一个数组,所以你可以做params[:tasks].each {|task_params| Task.create(task_params) }

之类的事情