【 Rails 】View から Controller に値を受け渡すには
Controller から View に値を受け渡すには、 Controller で値を定義してやればいいだけなのだけど、今度は逆に View から Controller に値を受け渡したいときはどのようにやればいいか、長いこと謎だった。
こちら stackoverflow.com の Answer を見て、ようやく値の受け渡し方が分かったので、メモ書き。
View に
link_to "リンク名", アクション名_コントローラー名_path(受け渡したい変数の名前)
と書いて、 Controller のアクションに
def アクション名 params[:該当するparam名] end
と書いてやれば、値の受け渡しができる。
具体的に今回は
View:
link_to "リンク名", new_report_path(@report)
Controller:
def new @report = Report.new @report = Report.find_by(id: params[:format]) end
としてやれば、値を取得することができた。
params の中に何を入れてやればいいか分からないときは、 Controller 側に binding.pry
を入れて Pry コンソールを立ち上げた後 params
と打ち込めば
[1] pry(#<ReportsController>)> params => {"action"=>"new", "controller"=>"reports", "format"=>"4"}
のように表示してくれるので、受け渡して欲しい値の変数名を探す。今回は format
がそれらしき変数名なので、 Controller に params[:format]
と打ち込むと View 側の @report
の id を受け取ることができた。
受け渡す値の名前を明示したり、複数の値を受け渡したいときは、 こちら sandragon.hatenablog.com を参考にして
View:
link_to "リンク名", new_report_path(:report_id => @report.id, :params_controller => params[:controller])
Controller:
def new @report = Report.new @report = Report.find_by(id: params[:report_id]) @params_controller = params[:params_controller] end
のようにアロー記法で書いてやればいい。
【 Rails 】capybara と capybara-webkit は別物
@komagata さんが capybara や capybara-webkit などの言葉の定義を esa のコメント欄で書かれていたので、メモらせてもらいます。
↓
通常 capybara と言った場合は、テストのための DSL とその仕組自身のことを指し、それぞれの driver が selenium 、 capybara-webkit 、 rack_test などになる。 driver として capybara と言った場合はわかりづらいが、普通は rack_test のことだと思われてしまう。
【使用例】: テストが selenium では通るが capybara-webkit (もしくは webkit )では通らない
【 Ruby 】文字列をメソッドオブジェクトに変換したいときは
【 Rails 】development 環境の DB の中身を覗くには
development 環境で SQLite を使っている場合、データ入力がきちんとできているかどうか確認するために、この記事 qiita.com と、この記事 d.hatena.ne.jp を参考にした。具体的には
$ bundle exec rails db
と入力した後、 sqlite の画面に切り替わるので、そこで
sqlite> .databases sqlite> .tables sqlite> select * from <目的のテーブル名>;
としてやれば、目的のテーブルに値がきちんと入力されているかどうかの確認ができる。
【 Rails 】 $ rake db:setup した後で、別の seed データを DB に新たに追加したいときは
development 環境で $ rake db:setup
した後で、別の seed データを DB に追加したいときがある。
db/fixtures/テーブル名.yml
に seed データを入力した後、再度 $ rake db:setup
を実行してもいいのだが、既に手動で入力しているデータがあった場合、 $ rake db:setup
を実行してしまうと、手動で入力したデータがリフレッシュされてしまう。
手動で入力したデータを生かしつつ、新たに別のデータを DB に追加したいときは、以下のようにする。
lib/tasks/
ディレクトリに、適当な名前の rake task
を作成する(ここでは仮に lib/tasks/interns.rake
としておく)。
例えば reports データを追加したい場合は、 lib/tasks/interns.rake
に intern:import_reports
を作成して、 db/fixtures/reports.yml
に seed データを入力する。その後、
$ bundle exec rake intern:import_reports
と実行すれば、 seed データが DB に追加される。
※ DB に SQLite を使っていた場合、 rake コマンドの実行の前に、一旦 Rails を停止しておかないといけないかも。
※ ちなみに、この方法は production 環境でも使える。 production 環境で追加データを挿入したくなったときには便利かも。
【 Rails 】Rails プロジェクトに新規画面を追加するには
例えば reports 画面を新たに追加したい場合は
$ bundle exec rails g controller reports index show new edit $ bundle exec rails g model report
と打ち込んだ後、 migration
を修正して
$ bundle exec rake db:migrate
を実行してやればOK。
上のコマンドを実行する上で以下の記事を参考にした。 qiita.com www.rubylife.jp www.atmarkit.co.jp maeharin.hatenablog.com
また、ここの説明 d.hatena.ne.jp も大変参考になった。
【 Rails 】 migration の実行コマンド
例えば Oopart テーブルに scares_count カラムを追加したい場合は、以下のように migration を実行する。
$ bundle exec rails g migration AddScaresCountToOoparts $ bundle exec rake db:migrate
【 Git コマンド】 $ git stash コマンド一式
こちら qiita.com に色々書いてあったのでメモ書き。
【 Git コマンド】作業ブランチと master ブランチの diff をまとめて表示するには
通常、 $ git diff
コマンドだと、ステージング前後の diff や commit 単位の diff は表示できても、ブランチ単位の diff をまとめて表示することができない。
それを表示するには
$ git diff master...作業ブランチ名
としてやれば、作業ブランチと master ブランチの、全体の diff を表示できる
参照: Git - プロジェクトの運営