Skip to main content
 首页 » 编程设计

ruby-on-rails之form_for helper 中的路径不正确

2024年06月20日24emanlee

我不知道如何在 form_for 中正确编写 url 路径来创建新对象。我尝试以不同的方式做到这一点,但没有运气。我想有某种特定形式的 url 可以包含对象的 id。

views/tasks/new.html

<%= form_for :task, url: [@task.user, @task] do |f| %> 
 
  <p> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
  </p> 
 
  <p> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
  </p> 
 
  <p> 
    <%= f.hidden_field :user_id, value: params[:user_id] %> 
    <%= f.submit %> 
  </p> 
 
<% end %> 

rake 动路线

controllers/tasks_controller.rb

class TasksController < ApplicationController 
before_filter :authorize, only: [:edit, :new, :destroy] 
 
  def index 
    @tasks = Task.where(user_id: params[:user_id]) 
  end 
 
  def show 
    @task = Task.find(params[:id]) 
    redirect_to users_path 
  end 
 
  def edit 
    @task = Task.find(params[:id]) 
  end 
 
  def new 
    @task = Task.new 
  end 
 
  def create 
    @task = Task.new(task_params) 
 
    if @task.save 
      redirect_to @task 
    else 
      render 'new' 
    end 
  end 
 
 
  def update 
    @task = Task.find(params[:id]) 
 
    if @task.update(task_params) 
      redirect_to @task 
    else 
      render 'edit' 
    end 
  end 
 
  def destroy 
    @task = Task.find(params[:id]) 
    @task.destroy 
    respond_to {|format| format.js } 
  end 
 
  private 
 
    def task_params 
     params.require(:task).permit(:title, :description) 
    end 
 end 

views/tasks/index.html

<p align="right"><%= link_to 'Users', users_path %> <%= link_to 'Tasks', user_tasks_path %></p> 
<h3>Tasks database</h3> 
<table> 
<% @tasks.each do |task| %> 
<tr id="task_<%= task.id %>"> 
  <td> 
    <b>Title:</b> 
    <i> <%= task.title %></i> 
  </td> 
 
  <td> 
    <b>Description: </b> 
    <i><%= task.description %></i> 
  </td> 
 
  <td> 
    <%= link_to 'Edit', edit_user_task_path(task.user, id: task.id) %> 
  </td> 
  <td> 
    <%= link_to 'Delete', user_task_path(task.user, id: task.id), 
        data: { confirm: 'Are you sure?' }, :method => :delete, remote: true %> 
  </td> 
</tr> 
<% end %> 
 
<tr> 
   <td><%= link_to 'Create task', new_user_task_path %></td> 
   <td><%= link_to 'Back to Users', users_path %></td> 
</tr> 
 
</table> 

有人可以帮忙吗?

请您参考如下方法:

您有用于任务用户nested_routes,因此像下面这样更改您的form_for应该可以解决您的问题

<%= form_for [current_user, @task] do |f| %>