我已经在我的用户展示视图中为常规脚手架形式部署了一个任务模型。我的想法是,用户可以在同一页面上发布和查看帖子。我在用户show动作中定义了一个任务,如此
def show
@user = User.find(params[:id])
@task = current_user.tasks.new
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
end
它确实创建了帖子,但它没有显示它们。关于为什么会这样的任何想法?
显示页面
#_form
<%= form_for(@task) do |f| %>
<% if @task.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@task.errors.count, "error") %> prohibited this task from being saved:</h2>
<ul>
<% @task.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :description %><br />
<%= f.text_field :description %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
#_form
#index page
<% current_user.tasks.each do |task| %>
<%= task.description %>
<% end %>
答案 0 :(得分:0)
这很奇怪,因为您找到了@user
,但是使用current_user
为您的表单创建了一个新的task
实例:
@user = User.find(params[:id])
@task = current_user.tasks.new
我认为current_user
已根据Cookie,会话或令牌找到了用户模型,因此您在@user
操作中可能不需要show
。
除此之外,如果您担心视图不显示current_user
的任务列表,那么您需要确保视图具有正确的标记,因此您应该向我们展示您目前的观点也是如此。这就是我假设你要做的事情:
class UsersController < ApplicationController
def show
@task = current_user.tasks.new
respond_to do |format|
format.html
format.json { render json: current_user }
end
end
end
class TasksController < ApplicationController
def create
@task = current_user.tasks.new params[:task]
if @task.save
# Send a new request to users#show
redirect_to current_user
else
# No request will be sent to users#show and the template will just get
# rendered with @task containing the same values from the initial request
# with form input
render 'users/show'
end
end
end
# app/views/users/show.html.erb
<ul><%= render current_user.tasks %></ul>
<%= form_for @task do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
# app/views/tasks/_task.html.erb
<li><%= task.name %></li>