0

MichaelHartlのRubyonRailsチュートリアルを終了しました。現在、提案された演習に取り組んでいます。彼が構築するアプリケーションは基本的にTwitterのクローンであり、マイクロポストを投稿でき、フィードに表示されますhttp://ruby.railstutorial.org/chapters/user-microposts#fig-micropost_created

メインページはhome.html.erbStaticPagesControllerからのもので、Micropostを投稿できるMicropostテキストボックスを備えています。テキストボックスのコードは次のようになります。

<%= form_for(@micropost) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_area :content, placeholder: "Compose new micropost..." %>
  </div>
  <%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>

@micropost変数は、次のようにStaticPagesControllerで初期化されます。

class StaticPagesController < ApplicationController
  def home
    if signed_in?
      @micropost = current_user.microposts.build
    end
  end

MicropostsController内には、次のような作成アクションがあります。

def create
  @micropost = current_user.microposts.build(params[:micropost])
  if @micropost.save
    flash[:success] = "Micropost created!"
    redirect_to root_url
  else
    @feed_items = []
    render 'static_pages/home'
  end
end

私の質問は、2番目ではなく最初の@micropost変数の目的は何ですか?

ありがとう、マイク

4

1 に答える 1

0

最初@micropostのものは、最初のコントローラーメソッドによってレンダリングされたビューで使用できるようになります。2番目@micropostは、2番目のコントローラーメソッドによってレンダリングされたビューで使用できるようになります。そして、たまたま2つのメソッドが同じビューをレンダリングしているのです。

唯一の問題は、2番目のコントローラーが条件付きであるためです。作成が成功した場合(検証に合格して保存した場合)、リダイレクトがあるため、適切なビューはありません(ただし、クライアント側のリダイレクト後、すぐに表示されます)。ただし、失敗した場合、ビューは、ユーザーが入力した値と、ビューがユーザーに表示できる検証エラーを含むオブジェクトを取得します。

于 2012-09-10T01:52:39.817 に答える