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_usertask

@user = User.find(params[:id])
@task = current_user.tasks.new

current_userCookie、セッション、またはトークンに従ってユーザーモデルが既に見つかっていると想定しているため、おそらくアクション@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 に答える