railsのroutesで指定するshallowではまった
shallowではまったネタを。
shallowとは
railsにはRESTfulなURLを複雑にしないためのshallowというオプションが存在する。詳しくはこちらを。
実際の指定
実際にはこう指定している。
namespace :admin do resources :accounts do resources :account_games, shallow: true end end
子リソースのidが決まっている場合はURLをネストする必要はないので大歓迎なのだが、_form.html.erbではまってしまった。
問題
form_forの引数でURLを決めるところで、newアクションを通そうとすると、editアクションでエラーになり、editアクションを通そうとするとnewでエラーとなる。。。なぜなら、newの時はURLに親リソースが含まれるが、editの時は親リソースが含まれないから。
rake routesでは以下のようになる。
new_admin_account_account_game GET /admin/accounts/:account_id/account_games/new(.:format) admin/account_games#new
edit_admin_account_game GET /admin/account_games/:id/edit(.:format) admin/account_games#edit
解決方法
結局、ifで分岐する以外に方法がわからなかったので_form.html.erbは以下のようにした。
<% if @account_game.id.nil? resource_info = [:admin, @account_game.account, @account_game] else resource_info = [:admin, @account_game] end %> <%= form_for(resource_info) do |f| %>
何かいい方法はないものか。
はじめてのpull request
pull requestする機会があったので経験してみた。
forkからpushまで
- GitHub上でforkする。→GitHub上の自分のリポジトリにコピーされる。
- git clone git@github.com:xxx.xxx.git →ローカルにコピーされる。
- git branche -b work →ローカルにブランチを作成する。
- ソース修正
- git commit -m 'message'
- git push origin work → GitHub上の自分のリポジトリにworkブランチを作成してpushする。
その後のGitHub上での操作は以下のようになる。
pull request作成
git push後、GitHubにアクセスすると以下のように「コミットされているけど、pull requestする?」というメッセージが表示されている。
用意周到。素晴らしい。「Compare & pull request」ボタンを押す。
メッセージの入力
メッセージの入力を求められる。タイトルは最後のコミットメッセージが表示されるようだ。また、pull requestの元と先のリポジトリ&ブランチが表示されているので確認する。
画面下部には修正差異が表示されていて最後の確認をすることができる。良ければ「Create pull request」ボタンを押す。
やり取り
ここで色々とやり取りができるっぽい。 「Files changed」タブではソースに対してコメントを入力することができる。
まとめ
- 自分のリポジトリで管理して好き勝手に修正できるので、他人のソースを修正するのに抵抗がなくなる。
- うまくいけばその修正を取り込んでもらえる。取り込んでもらえなくても自分は自分で使えばいい。
- 操作が楽。
- こうやってリモート開発しているのね。
git pushでinvalid author/committer???
NetBeansでコミット後、コンソールからgit pushしたら以下のエラーが発生した。
remote: error: object 57865af073ba3ef03758680c870ff3a970e5ba21:invalid author/committer line - bad email
remote: fatal: Error in object
error: pack-objects died of signal 13
error: failed to push some refs to 'git@github.com:tsurugeek/sample.git'
invalid author/committer???
git logの結果を見ると確かにおかしい。
sample junya$ git log
commit 57865af073ba3ef03758680c870ff3a970e5ba21
Author: Junya Kemmochi <github@sample.com <>
Date: Wed Apr 15 15:13:05 2015 +0900
以下のようになるのが正しい。
Author: Junya Kemmochi <github@sample.com>
コミットログを修正したら正常にgit pushできた。
git commit --amend