2012年12月10日月曜日

rails:comment機能を実装

せっかく出来た作品ページに、comment機能を追加する。

要件
1.入力者の名称が表示されるようにする。
2.入力者が、新規入力と、削除ができるようにする。
3.コメントの入力、削除に、画面遷移・再読込を不要にする。
4.コメントの入力者のアイコンが表示されるようにする。

・まずは、子model(コメント)基本機能を作成する。
$ rails g model comment muserdtil_id:integer body:text photo:references

・routes.rbで親modelに対して以下の定義をする。
resources :photo do
  resources :comments
end

・子modelはreferrences設定をすると、勝手にbelongs_to :photo設定してくれるので、設定は不要。

・親modelの方は、has_many設定が必要。
has_many :photos

・親modelのview:showに以下を追加
<h2>Comments</h2>
<ul>
<% if @bsc.photocomments.any? %>
<% @bsc.photocomments.each do |comment| %>
<li>
<%= comment.body %> (by <%= comment.muserdtil_id %>)
</li>
<% end %>
<% else %>
<li>no comment yet.</li>
<% end %>
</ul>
追加完了。

・子のモデルのControllerを作る。
$ rails g controller Comments
def create
    @photo = Photo.find(params[:photo_id])
    @comment = Photo.find(params[:photo_id]).comments.create(params[:comment])
    redirect_to photo_path(@photo)
  end


・親modelのview:showに投稿フォームを追加。
<h2>Add a comment</h2>
<%= form_for([@post, @comment]) do |f| %>
<div class="field">
  <%= f.label :body %>
  <%= f.text_area :body, :rows => 5 %>
</div>
<div class="actions">
  <%= f.submit %>
</div>
<% end %>
私の場合、投稿者は、LoginSessionから取得してくるので、項目はなし。

・親controllerのshowにコメント枠を追加する。
# コメントの枠を作成する。
@photo = Photo.find(params[:id]).comments.build

お、ユーザ名が表示できていない。commentをreateする際に盛り込んでいないからですね。次回はコメント欄にユーザ名を表示する開発をします。








0 件のコメント:

コメントを投稿