0

我已经在我的用户显示视图中为任务模型呈现了部分常规脚手架表单。我的想法是让用户可以在同一页面上发布和查看帖子。我在用户显示操作中定义了一个任务,如下所示

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

1 回答 1

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>
于 2013-07-23T13:32:31.957 回答