2013年2月2日土曜日

railsパス2

やはりダイレクトにパスを入れたら大変厄介な事になります。railsプロジェクト内のpublicがアパッチのドキュメントルートに設定されているうちは問題は発生しませんが、http://www.XXX.XXX/books  <==これは問題ない
http://wwwXXX.XXX/YYY/books  <==YYYの部分が変わるので、YYYの部分を意識しなければならない。rails関数を使えば自動でやってくれるので、出来るだけrails関数を使った方がコードが少なくなります。

以下の様なルーティング定義をroutes.rbに書き込むと、その下に表示されているような関数が来ます。出来るだけそれを使った方が無難です。注意:関数名の最後は_path or _urlです
  resources :posts do
    resource :comments do
    end
  end
$rake routes

post_comments POST           /posts/:post_id/comments(.:format)      comments#create
 new_post_comments GET    /posts/:post_id/comments/new(.:format)  comments#new
edit_post_comments GET    /posts/:post_id/comments/edit(.:format) comments#edit
                                   GET    /posts/:post_id/comments(.:format)      comments#show
                                   PUT    /posts/:post_id/comments(.:format)      comments#update
                                DELETE /posts/:post_id/comments(.:format)      comments#destroy
                         posts GET    /posts(.:format)                        posts#index
                                 POST   /posts(.:format)                        posts#create
                  new_post GET    /posts/new(.:format)                    posts#new
                  edit_post GET    /posts/:id/edit(.:format)               posts#edit
                          post GET    /posts/:id(.:format)                    posts#show
                                  PUT    /posts/:id(.:format)                    posts#update
                               DELETE /posts/:id(.:format)                    posts#destroy
パスチップス1 コメント新規作成に関してはtype1とtype2は同じ paramsは:post_id と:comment=>{}が入っています。結構便利です。
type1:
<%= form_for([@post,@post.comments.build]) do |f| %>

type2:
<%= @post.comments %>
<%= @comment = Comment.new %>
<%= form_for([@post,@comment]) do |f| %>
パスチップス2 editに関しては上下は同じです
<%= form_for(@comment,:url =>{:action =>"update",:controller => "comments"}) do |f| %>
or
<%= form_for(@comment) do |f| %>
パスチップ3 以下の上下は同じですが、edit_XXXの方は追加情報を加える事が出来ます。
    <%= link_to 'Edit', edit_post_comments_path(@post,comment,:abc => "ddddd") %>
<%= link_to 'Edit', [:edit,@post,comment] %>
結果として[@post,@comment]形式はform_forの時つかって、link_to ではroutes.rbで作られる関数をりようすするといいような気がします。


railsの場合はレールに乗ったらコードは大変少なくなります。レールに乗りましょう。
レールに乗る為に最近注意している点は以下です。
1.DBと関係なくても出来るだけモデルを作る(理由:検証が簡単に追加出来し、エラー表示部分も連動してくれる)
2.遷移に関してはroutes.rbで作られる関数を利用。url_forでは表現出来ないパスがある
3.深くならない限り、パスのネストを使う(理由:親IDをsession等に覚えている必要が無く、パスだけで関連が想像出来る)
4.リスト表示の部分は出来るだけ部分テンプレートで書く。(理由:検索処理などを直にajax対応出来る)

0 件のコメント:

コメントを投稿