2016-11-04 70 views
0

我有一个用于创建显示在项目/ show和tasks/show上的任务的窗体。Rails:如何强制表单发布而不是修补?

在projects/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 %> 

有没有办法迫使轨道总是从这种形式创造新的任务?

+0

你试过'方法:: post'吗?你在问题的'post'之前错过了冒号。 –

+0

嗨,当我意识到我跳过结肠时,我很兴奋,但它仍然不起作用。当我使用'<%= form_for([@ project,@task],method :: post)do | f | %>'我仍然在HTML中获得'。 – interfab

+0

你有没有把你的项目托管在heroku或任何地方?这个问题可能与jQuery UJs有关。检查浏览器的控制台是否有任何错误或警告。 –

回答

1

尝试使用现有任务的属性分配新任务对象。这样的形式将发布而不是修补程序:

# 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 %>