Rails:如何强制表单发布而不是补丁?

时间:2016-11-04 00:10:12

标签: ruby-on-rails forms

我有一个用于创建任务的表单,它显示在项目/节目和任务/节目中。

projects / show上的表单可以很好地创建新任务,但是在tasks / show上它想要编辑任务,因为我需要从我的任务控制器的show动作中调用任务ID。

我需要修改此表单以始终创建新任务。

我尝试了method: post,但rails仍然将<input type="hidden" name="_method" value="patch" />插入HTML。

以下是我的控制器和表格:

# Tasks Controller
def show
   @projects = Project.all
   @project = Project.find(params[:project_id])
   @task = Task.find(params[:id])
   @tasks = @project.tasks.all
end

def create
   @project = Project.find(params[:project_id])
   @task = @project.tasks.new(task_params)
   @task.save
   redirect_to @project
end

#Form
  <%= form_for([@project, @task]) do |f| %>
      <%= f.text_field :title %>
      <%= f.submit %>
  <% end %>

有没有办法强制rails始终从这个表单创建新任务?

1 个答案:

答案 0 :(得分:1)

尝试使用现有任务的属性分配新的任务对象。这样表单将POST而不是PATCH:

# Tasks Controller
def show
   @projects = Project.all
   @project = Project.find(params[:project_id])
   @task = Task.find(params[:id])
   @new_task = Task.new(title: @task.title)
   @tasks = @project.tasks.all
end

# ...

#Form
<%= form_for([@project, @new_task]) do |f| %>
    <%= f.text_field :title %>
    <%= f.submit %>
<% end %>