Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

rails

【読書メモ】Ruby on Rails 6 エンジニア 養成読本 (Software Design plusシリーズ)

Ruby on Rails 6 エンジニア 養成読本 (Software Design plusシリーズ)作者:すがわら まさのり,前島 真一出版社/メーカー: 技術評論社発売日: 2019/10/26メディア: 単行本もう3年はRubyやRailsを使っておらず、知識がRails3で止まっています。 そもそもWeb…

'twitter-bootswatch-rails'でbootswatchにあるテーマを使う

Bootswatch: Free themes for Bootstrapbootswatchにはbootstrapをちょっと格好良くできるテーマ集です。 色合いの変更が主なので、使用感を変えずに使うことができます。 railsでコレを使う場合は、generatorつきの 'twitter-bootswatch-rails'という便利ge…

/var/www/RAILSAPP/publicにindex.htmlを置くもの、全ての希望を捨てよ あるいは、passengerにおける処理解決順について

試験が終了したrailsアプリ(myapp)を、本番環境のpassengerで稼働させる簡単なお仕事をしていました。Installing Passenger + Apache on Ubuntu 14.04 LTS (with APT) on a Linux/Unix production server (part 2) - deployment walkthrough with Ruby, Pass…

自前鯖のrails4のアプリをproduction環境で稼働させる

今日は自前鯖のrails4のアプリをproduction環境で稼働させる方法の話です。実はHerokuみたいな環境の記事は書いた事があります。 shuzo-kino.hateblo.jpただ、自前鯖だとデータベース等々で手を動かさないと駄目なトコも多いです。 普段人任せか自動化スクリ…

railsstrapのdatepickerをつかう

railsstrapはtwitter-bootstrapをヨロシク使う以外にも、色々便利な拡張がついてきます。 今回はその一つ「datepicker」について扱います。 実際のところ これまで、泥臭くdate_fieldとcss芸で対処していた所を、date pickerで実装し直すケースを考えます。 …

evalで動的にメソッドを追加する(その4)Railsのform初期値をHelperに突っ込む

以前の記事ではviewでevalを呼び出してやる方式を試しました。 shuzo-kino.hateblo.jp前回のような全部のせメソッドで内部的に切り替え……でもよいのですが、 今回は、class_evalとdefine_methodをつかって、用途にあったメソッドを生成する方法を考えます。 …

date_selectで(やや古風な)日付選択欄をつくる

date_selectはRailsの初期の頃から実装されていた、formタグの一つです。 名前の通り、日時の入力に特化したタグで力技でoptionのフォーム生成をやってくれます。 実際のところ formで生成するときは、以下のようにします。 オプションの意味は公式ドキュメ…

【自習メモ】railsのmatchの挙動

私のようなRails若葉マークにとって、matchメソッドは救いの女神です。 雑に書いても、雑に補足してくれます。 とは言え、規模が大きくなってくるとそうも言っていられなくなります。 今回は、そんなこんがらがった糸を解す過程のメモです。 実際のところ HT…

twitter-bootstrap-railsからrailsstrapへ移行するときは、念のためrails dで環境を綺麗にしておいた方が良い

railsstrapはtwitter-bootstrap-railsの互換gemです。 特に、font-awesomeまわりの挙動が、デフォルトで組み込まれている分、前者より安定している印象があります。 基本的挙動は同じですが、若干違うため多少の注意は必要です。 特に、DatePickerなど本家で…

RoRアプリの再構築が上手く行かない場合、"rails g"が必要なgemが原因かもしれない

過去に担当したRoRシステムの手直しをすることになりました。 スクリプトを見るのは、実に一年半ぶり。 "rails s"すら忘れているレベルで現場から離れていたので、今回の記事みたいな有りがちな事も忘れてました。 実際のところ 以下のモノを適用しているシ…

gem「view_source_map」で、Render元のファイルをViewに表示する

view_source_mapはViewにRenderもとのContollerファイル名を記載してくれる便利Gemです 使い方 特になんの工夫もなく、rails sしてあげれば <p>test</p> てな感じで展開されます。 ソースをみると、Railtie自体に細工をする事でこの魔法が実現されているようです……

Railsのbundle installで突っ込んだgemの配置先をみる

Railsのbundle installで突っ込んだgemの配置先をみるには 「bundle show」です。 $ bundle show sass /Users/shuzo_kino/.anyenv/envs/rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/sass-3.4.13また、半端に入力しても $ bundle show sas 1 : sass 2 : s…

mオプションでRailsプロジェクトの生成テンプレートを使う

「-m」はrails newの際、gist等々に放り込んだレシピに従ってあれこれしてくれるオプションです。 こんな感じで使います。*1 $ rails project_name -m <https://gist.github.com/banker/219223/raw/>生テキストでないと読み込まないので注意してください。 できること テンプレートの記述にはUNIX系コマン</https://gist.github.com/banker/219223/raw/>…

Railsをデーモンで動かす

Railsアプリはデーモンとして起動する事ができます。 やり方は簡単で $ rails s -dと、オプションを一個つけるだけ。とはいえ、これだけだとデーモンらしく動かすのは至難の技なので mirasrael/daemons-rails · GitHub や resque/resque at 1-x-stable · Git…

railsでActiveRecordを使いたくない場合

RailsはデフォルトでActiveRecordというORMがついてます。 ただ、軽い個人的プロジェクトで使うような場合などです。 また、Mongoidを使いたい場合はそもそも取り除く必要があったりします。今回はそういった場合の対処法です。 方法 rails new myapp --skip…

railsで特定の[ファイル|行]だけspecを走らせる

railsでspecをやる場合 $ rake specがありますが...これ、全部実行してくれるので一寸不便です。 一個だけファイルをテストしたい場合はSPEC変数に設定したげます。 $ rake spec SPEC=spec/controllers/hoges_controller_spec.rb更に、特定ファイルの特定の…

railsにでてくるclass_optionなるものの正体

submitでモデルから挙動を判定してくれるアレですが... 3.0からの機能のようですね。 これで使われているのがclass_optionなるものに記録されたmodel名です。 実装をみたところBaseクラスに対してmethodを定義してあげているだけ...でした # File railties/l…

submitの挙動はモデルが保存済みかどうかで決まる

formタグのsubmitは対象モデルが保存済みかどうかを読み取りに行き、 自前でcreateかupdateかを判定してくれます。 確認フォームのような画面を実装する場合、この点を意識しないと勝手にupdateになって詰みます。*1この魔法を実現している部分がこちら ## l…

form_forの中でrenderを使いたい場合localオプションで指定する

form_forの中でrenderを使いたい場合、localオプションで指定します。まず、大元のページで <%= form_for(@picture) do |f| %> <div class="field"> <%= render :partial => "page_1", :locals=>{:f=>f} %> </div> <% end %> こうすれば、render先のファイルでもform_forのブロック…

strong_parameterで安全にparamを渡す

carrierwaveの自動生成スクリプトをみてたらこんな記述が... # Never trust parameters from the scary internet, only allow the white list through. def picture_params params.require(:picture).permit(:image) end これはstrong_parameterという奴で、…

database.ymlにdotenvの値を導入したい場合erbの記法を使う

複数人でアプリ開発をしており、 既に各々データベースの環境を構築してしまっている時にはこれが便利です。 gem 'dotenv-rails'を追加して ".env"に MYSQL_PASS="password"とやった上で development: adapter: mysql2 encoding: utf8 reconnect: false data…

evalで動的にメソッドを追加する(その3)__Railsのformをevalで追加する

evalは文字列をスクリプトとして解釈して実行するKernel所属のメソッドです。 これを活用すると、似たメソッドを延々と生成する愚を犯さずに済みます。 更に、文字列を生成して評価する形式であるため、変更に対しても柔軟です。 実際の所 helperに def choo…

link_to_ifという便利な子について

<%= link_to_if(user_signed_in?, "編集", edit_hoge_path(@fund), class: 'btn') %> とやれば、deviceでサインインしている場合*1リンクを表示、 なければただの文字列を表示します。非ログイン時に何も表示したくない場合は空のブロックを渡します。 <%= l…

sendメソッドでオブジェクトの付属メソッドを実行できる

Objectクラスに付属しているsendメソッドは、引数に文字列かシンボルを与えてやると同名のメソッドを引っ張り出してくれる凄い子です。 %w(pop push slice).send(:to_s) #=> "[\"pop\", \"push\", \"slice\"]" 引数つきで実行する事も当然可能です。 %w(pop …

link_toのアレコレ

link_toとやる場合、よくある記法だと <%= link_to "新規作成", :controller => "pages", :action => "new" %> ですが、railsは賢い子なので <%= link_to "新規作成", new_page_path %> とやってあげると、pageコントローラーのnewメソッドを呼び出してくれ…

rails cをリロードする

rails cを使うと、わざわざブラウザを使わなくともメソッドの挙動lを検証をする事ができます。 ただ、実行中にmodelを弄っても反映してくれません。弄った結果をすぐ反映したい場合は >> reload! とやればよいです。 これで毎度毎度rails cとやらずとも同じ…

rake db:resetではschema.rbから復旧が行われる

今迄無批判に $ rake db:migrate:reset $ rake db:resetとしていました。 これでDBを弄りつつseedを配置していた訳ですが... Engineをmroongaに設定したところ、今迄の手法が通じませんでした。 というのも、db:resetは 削除=>作成=>schema.rbから復旧と…

ActiveRecordのmigration時にSQLのエンジンを選択する

たとえば、検索エンジンにmroongaを追加したい場合は 既存のdb/migrationの当該ファイルにoptions: "ENGINE = mroonga"を追加します class CreateProfessors < ActiveRecord::Migration def change create_table :professors ,options: "ENGINE = mroonga" d…

Turnipのstep定義でidを指定したい場合

Turnipのstep定義でidを指定したい場合は、 findメソッドに:cssオプションを持たせて使います。 ## hoge.step step ":css_tag に :content が表示" do |css_tag, content| expect(find(:css, css_tag).text).to eq(content) end ## piyo.feature When "span#…

TurnipでもFactory Girlを使う(文章補強中...)

TurnipでもFactory Girlが使えます。 TurnipはCapybaraベースなので、当たり前とえば当たり前ですが #Gemfile group :test do gem 'factory_girl_rails' end ## spec/devise_steps.rb step 'ログイン' do FactoryGirl.create(:user) Capybara.app_host = "ht…