やはりダイレクトにパスを入れたら大変厄介な事になります。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対応出来る)