form_for helper中的路径不正确
我无法弄清楚如何在form_for中正确写入一个url路径来创建一个新对象。我试图以不同的方式做,但没有运气。我想有一些特定形式的url可以包含对象的id。 form_for helper中的路径不正确
视图/任务/ 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 %>
耙路由
控制器/ 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
的意见/任务/ 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>
有人能帮忙吗?
可以请你试试这个:
<%= form_for([current_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>
这实际上不起作用。 –
希望你有'current_user'值'' – Prashant4224
感谢您提供有用的信息。而且current_user值与某个用户的id有什么不同? –
看到它似乎航线您需要允许管理员/用户为任何用户创建任务。因此,对于这个第一次在你的控制器中添加before_action
:
before_action :find_user
def find_user
@user = User.find(params[:user_id])
end
然后在你形成不喜欢它:
<%= form_for [@user, @task] do |f| %>
然后在您的控制器的create
动作做这样:
def create
@task = @user.tasks.build(task_params)
if @task.save
redirect_to @task
else
render 'new'
end
end
当您需要为许多用户保存任务时,可以使用以上方法,如果您需要只保存current_user
任务,则可以使用上述答案。
对我来说无价的信息。对不起,我已经接受了另一个答案。但是,你的帖子不是那么有帮助) –
试试这个:'' – Deep
@Deep相同的错误 –
仅使''%= form_for @task,url:new_user_task_path(@ task.user)do | f | %>' – Deep