attr_accessibleはRails4では使えなくなったのにユーザー管理の定番 gem deviseではまだ使っているようなので新しい昨日の Strong parameter に書き換えておきましょう。
具体例 devise の設定で User モデルにこんなのが書いてると思うので
attr_accessible :email, :password, :password_confirmation その行を削除して下の方にこれを追加しましょう。
private def user_params params.require(:user).permit(:email, :password, :password_confirmation) end 参考 [attr_accessible][1]
何故だか理由はさっぱりわかりませんが、どうにもおかしな動きが route.rb をいくらいじってもなおらないので色々情報を探してたら、config の omniauth.rb を消したら動きました。
consumer_key とかは devise.rb に書いておきましょう。
参考 [ruby on rails 3 – Authentication failure : Devise + OmniAuth + Twitter – Stack Overflow][1]
https://github.com/mohitjain/social-login-in-rails
ここにあります。
devise と omniauthを組みわせて使うと default の email と encrypted_password が必ず値を持たなければならない null => false の制限が邪魔だったのでMigrationで削除しようとしたけど方法がわからなかったので調べてみた。
やりかた class RemoveConditionFromUser < ActiveRecord::Migration def change change_column :users, :email, :string, null: true change_column :users, :encrypted_password, :string, null: true end end 参考 [Rails Migration: Remove constraint – Stack Overflow][1]
Macの環境構築をやり直したので、入れてるgemの一覧を出してみました。
actionmailer (4.0.0) actionpack (4.0.0) activemodel (4.0.0) activerecord (4.0.0) activerecord-deprecated_finders (1.0.3) activesupport (4.0.0) addressable (2.3.5) arel (4.0.0) atomic (1.1.14) bigdecimal (1.2.0) buftok (0.2.0) builder (3.1.4) bundler (1.3.5) celluloid (0.15.2) chunky_png (1.2.8) coderay (1.1.0) compass (0.12.2) compass-normalize (1.4.3) compass-recipes (0.3.0) descendants_tracker (0.0.3) diff-lcs (1.2.5) equalizer (0.0.8) erubis (2.7.0) factory_girl (4.3.0) factory_girl_rails (4.3.0) faker (1.2.0) faraday (0.8.8) ffi (1.9.3) formatador (0.2.4) fssm (0.2.10) guard (2.2.4) guard-rspec (4.2.0) hike (1.2.3) http (0.5.0) http_parser.rb (0.
既に該当するモデルの値が存在していたら update で値を更新して、まだ存在しない場合は create で新しくモデルのインスタンスを作成したい時ありませんか? 少なくとも自分にはありましたし、検索でここに辿り着いたあなたもきっとあると思います。
Railsならきっと簡単な方法があると思ったので調べてみたらありました。
やり方。 こんな感じでOK。
my_class = ClassName.find_or_initialize_by_name(name) my_class.update_attributes( :street_address => self.street_address, :city_name => self.city_name, :federalid => self.federalid, :state_prov_id => self.state_prov_id, :zip_code => self.zip_code ) 注意点 ちなみに create_or_update は ActiveRecord::Callbacks の private 関数として用意されてるご様子。
[create_or_update (ActiveRecord::Callbacks) – APIdock][1]
参考 [ruby – create_or_update method in rails – Stack Overflow][2]
Ajaxの処理をRailsでするときはControllerに
respond_to do |format| format.js end と書いてたんですが、いちいちブロック引数に format を使って処理するのは無駄な気がしたので一行で書ける方法を調べてみた。
解決策 respond_to :js でOKでした。
respond_to :html, :js な書き方もOKなようです。
参考 [respond_to (ActionController::MimeResponds::InstanceMethods) – APIdock][1]
開いてるファイルをそのまま実行できるsmart-compileでGemfileを開いてたらbundle installを実行したかったのでやり方を調べてみました。
設定方法 どうやらsmart compile は自動的にコマンドの実行ディレクトリをファイルがある場所に移動してくれるようなので単純に Gemfileというファイル名とbundle installのコマンドを他のファイルと同じように紐付ければOKのようです。
(global-set-key (kbd "C-c C-x") 'smart-compile) (setq smart-compile-alist (append '(("\\.rb$" . "ruby %f")) '(("\\.php$" . "php %f")) '(("\Gemfile$" . "bundle install")) smart-compile-alist)) もちろん ruby や php を使ってなかったら該当行は必要ありません。
使い方 これで Gemfile を開いて C-c C-x するとこんな風に bundle install が実行されます。
-*- mode: compilation; default-directory: "~/dev/foo/" -*- Compilation started at Sun Dec 15 16:29:42 bundle install Using rake (10.1.0) Using i18n (0.6.9) from git://github.com/svenfuchs/i18n.git (at master) Using minitest (4.
Railsの学習がてらに2chもどきをつくろうと思って `rails new 2ch` してみるとエラーになる。これはいいんだけど、`rails generate Model 2ch` ってエラーを吐かないのに実際は使えないので修正がめんどくさくなるので気をつけましょう。
Railsでこんなdeprecatedの警告が出てきたので対処方法を調べた。
[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message. 対策 config.i18n.enforce_available_locales = true でOK, `locale validation` をきちんとするなら true、どうでも良いならfalseらしい。よくわかんない。
参考 [ruby – Rails I18n validation deprecation warning – Stack Overflow][1]