Ruby on Rails Tutorial (32)

継続がどこだかがよく分からない件。
とりあえず signup な処理が正常終了した場合の

      redirect_to @user

から user#show の掘削中のはず。しかし自分でヤッてて継続がワケワカになっちゃうのって後天性記憶不全が相当酷い状態ってことなのかなぁ。

とりあえず

整理しておくことに。今まで確認してきた部分から他の controller に、なソレは

  • shared/stats な partial の
    • following_user_path
    • followers_user_path

くらいなのか。これは別途で controller も確認なのかスデに確認済みなのか。色々ヤッてる気分だったんですが、まだまだ上ッツラを撫でてる程度ですね。
app/views/users/show.html.erb の未確認な部分が以下。

  <div class="span8">
    <%= render 'follow_form' if signed_in? %>
    <% if @user.microposts.any? %>
      <h3>Microposts (<%= @user.microposts.count %>)</h3>
      <ol class="microposts">
        <%= render @microposts %>
      </ol>
      <%= will_paginate @microposts %>
    <% end %>
  </div>
</div>

signed_in? なら render してる follow_form.html.erb 確認。以下。

<% unless current_user?(@user) %>
  <div id="follow_form">
  <% if current_user.following?(@user) %>
    <%= render 'unfollow' %>
  <% else %>
    <%= render 'follow' %>
  <% end %>
  </div>
<% end %>

自分だったら何も出力せず。自分以外であれば follow してるかどうかで出力を変えているのが分かります。ええと、_unfollow.html.erb の定義が以下です。

<%= form_for(current_user.relationships.find_by_followed_id(@user),
             html: { method: :delete },
             remote: true) do |f| %>
  <%= f.submit "Unfollow", class: "btn btn-large" %>
<% end %>

んーと、ここポイント高いですね。_follow.html.erb も引用しときます。

<%= form_for(current_user.relationships.build(followed_id: @user.id),
             remote: true) do |f| %>
  <div><%= f.hidden_field :followed_id %></div>
  <%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>

このあたりが使われているはず。

 relationships POST   /relationships(.:format)       relationships#create
  relationship DELETE /relationships/:id(.:format)   relationships#destroy 

しかし unfollow な方にはギリで delete なメソド使うけんね、とありますが、follow な方がなんもない。あるいは model 確認なのかな。user#relationships な定義が以下か。

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation, :admin
  has_secure_password
  has_many :microposts, dependent: :destroy
  has_many :relationships, foreign_key: "follower_id", dependent: :destroy

relationships.build ですか。。ちょい理解が微妙な部分を整理。

  • Relationship#find_by_followed_id メソドについて
  • form_for の :remote
  • form_for と起動される controller の関連付け
    • このケイスだと Relationship なソレが対象なので、という事になるの?
  • Relationship#build について

とりあえず続きがあれば追記するかもしれません。