【RoR】Ruby on Rails Part16
>>949 よく気づいたね
それがCMSでのSEO攻略のミソの部分だよ
検索エンジンとしては特定URLのページ内容がしょっちゅう書き換わるようなURLは検索結果として信頼性(精度)が著しく落ちてしまう
いかにURLと記事内容を固定化させるかはCMSにおいての必勝法みたいなもん
欲を言えばhtmlで出力させるなどして静的化させたほうがよい
2chみたいなコメントが増える型でURL固定って無理じゃね
Rails 4からhas_one等に:selectのオプションを指定してカラムを絞ることが出来なくなったみたいですが、代わりの方法はあるのでしょうか?
>>956 ラムダ式で普通にできるっしょ
確か別のクエリ叩いたりRubyの式を書くこともできたはず
958 :
質問常連者 感謝感謝 :2013/10/18(金) 21:07:04.33 ID:NnVzWy/v
carrirerwaveのほうが今は主流かな
>>954 無理じゃない
古いほうから順にページ番号をナンバリングしていけば完全に固定化される
誰かバリデーションのことで教えて! Aというテーブルにa, b, c, dという4つのカラム(ポリモーフィック)があります。 このa, b, c, dが完全一致するレコードが重複してはいけない場合は eというカラムを追加して保存時に e=a+b+c+d A.e=e A.save として Aのモデル定義にて eカラムをuniqunessのバリデーション設定してあげる必要がある? それとも、いちいちeカラムとかを追加しないでスマートにバリデーションチェックをかける方法はありますか?
>>961 validates uniqueness scope でぐぐれ
963 :
nobodyさん :2013/10/19(土) 13:04:54.18 ID:hyytPm3D
railsでcancan的なシステムを自分で構築するには、どのサイトで勉強するのが良いでしょうか? 認証はdeviseではなく自前でやっているので、拡張性を考えて全部自前でやりたいなと思っているのです。
deviseはコントローラーやメソッドをドキュメント見てオーバーライドしたりすれば制約はほとんどないよ trackableなんかも自作メソッドで別テーブルに保存したりできるし
965 :
nobodyさん :2013/10/19(土) 13:17:33.46 ID:hyytPm3D
>>964 追々deviseにするかもしれません。
ただ、今は構築中の初心者なので、仕組みを理解しながらやっていきたいなと思っているのです。
cancan的なことを自前でやっている人はあまりいないですかね?
一般ユーザーは登録編集までできて、管理ユーザーは削除までできるとか
966 :
nobodyさん :2013/10/19(土) 13:29:03.29 ID:uAnzwLAs
authorization とか authz とかのキーワードで探した実装を参考にするとよいのでは?
RailsによるアジャイルWebアプリケーション開発って本が参考になると思う
どうせRuby・Railsのバージョンが古くて 互換性がないというオチだろう?
969 :
nobodyさん :2013/10/19(土) 15:56:03.97 ID:Jr/4anBv
tests GET /tests(.:format) tests#index POST /tests(.:format) tests#create new_test GET /tests/new(.:format) tests#new dit_test GET /tests/:id/edit(.:format) tests#edit test GET /tests/:id(.:format) tests#show PUT /tests/:id(.:format) tests#update DELETE /tests/:id(.:format) tests#destroy こういうルーティングがされているとき @test = Test.new(params[:test]) format.html { redirect_to @test } redirect_to @testはどうして「GET /tests/:id(.:format) tests#show」になるのでしょうか? redirect_to @test.id ならわかりますが・・・
970 :
nobodyさん :2013/10/19(土) 17:08:23.46 ID:uAnzwLAs
>>969 redirect_to と url_for のリファレンス嫁
971 :
nobodyさん :2013/10/19(土) 18:56:06.66 ID:Jr/4anBv
redirect_to(options = {}, response_status = {}) Record - The URL will be generated by calling url_for with the options, which will reference a named URL for that record. url_for(options = nil) Link Relying on named routes Passing a record (like an Active Record) instead of a hash as the options parameter will trigger the named route for that record. The lookup will happen on the name of the class. So passing a Workshop object will attempt to use the workshop_path route. バッチリ書いてるね
973 :
あ :2013/10/19(土) 20:04:10.64 ID:???
代わりに、オプションパラメータとしてハッシュを記録(Active Recordのような)を渡すと、 そのレコードの名前付きルートの引き金となるでしょう。 ルックアップは、クラスの名前に起こります。 だから、ワークショップのオブジェクトを渡すとworkshop_pathルートを使用しようとします。
974 :
nobodyさん :2013/10/19(土) 20:39:09.87 ID:Jr/4anBv
現在、apacheで運用してて毎日6万PV回してるけどもう限界かもしれん サーバーが日に2度3度落ちる 1GBさくらVPSだとこんなものかのぉ
それくらいならnginxにかえれば全然持つよ
nginxってそんなに優秀なの?
apacheはメモリ食い過ぎるから今の主流はnginx-unicornだよ 優秀ってほどじゃないけどそれくらいのPVならまだ戦えると思う
passenger は裕福なサーバ向けだからね
ちなみに、さくらの2GB SSDプランで nginx+unicorn なら どのくらいまでの アクセス数/日 であれば戦えそう? 50万PVくらいかな?
ウェブサーバーごときで そんなに差は出ない。 結局はアプリ次第。
982 :
nobodyさん :2013/10/20(日) 13:18:52.25 ID:fxS1kk8p
http://railscasts.com/episodes/250-authentication-from-scratch-revised?view=asciicast http://cumiki.com/hacks/16 ここらへんを参考に認証機能をあえて自前で構築しているのですが、下記のようなエラーが出てしまいました。この対策(短期的長期的)を教えていただけたら幸いです。
私がやっていたのは、サインアップ、ログインアウトを実装し、その後にユーザーデータを全部destroyしました(なぜという訳ではないのですが)。
するとsession[:user_id]には"11"という数字が残ったまま、そのユーザーが見つからんということでエラーが出ているようです。
下記はアプリケーションコントローラーのコードで、レイアウトテンプレートに入れて共通表示しているものです。
私が知りたいのは、@session[:user_id]をターミナルとかから消せないか、A長期的に、ログアウトやユーザー削除がsession[:user_id]を掃除するにはどうすればよいのか。
とりあえず、共通表示のコードを取り払えば、このエラー表示からは逃げれそうですが、仕組みを解するためにも上記二点を知りたいと思っています。
宜しくお願い致します。
ActiveRecord::RecordNotFound in UsersController#new
Couldn't find User with id=11
Extracted source (around line #8):
private
def current_user
line8 @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
エラー内容とやりたいことがまったく噛み合っていないので答えようがない
984 :
nobodyさん :2013/10/20(日) 13:59:25.30 ID:fxS1kk8p
985 :
nobodyさん :2013/10/20(日) 14:05:23.79 ID:fxS1kk8p
>>983 すみません。
素人過ぎて、噛みあっていないというところから理解できていませんでした。
session[:user_id]に残っていると思われる"11"というのを、削除したいのですが、短期的解決方法(@)、長期的解決方法(A)を探っている段階でございます。
もうすこし勉強してきます。
986 :
nobodyさん :2013/10/20(日) 14:19:23.61 ID:Hy7aQ34j
クッキー消せ
987 :
nobodyさん :2013/10/20(日) 15:25:29.58 ID:fxS1kk8p
>>986 ありがとうございます!
エラー表示されなくなりました!
こちら(クライアントサイド)のクッキーの問題なんですね^^;
>>981 静的ファイルの読み込み速度は全然違うよ
989 :
nobodyさん :2013/10/20(日) 16:33:37.68 ID:Hy7aQ34j
>>987 Railsのデフォルトではクッキーにセッション情報が入っている。
(改竄対策はされている。Rails4からは暗号化もされている)
サーバ側でセッション内のユーザーIDからユーザーオブジェクトを作ろうとして見つけられなかった
のがエラーの原因なので、対応としては、
クライアント
* もうサーバ側に存在しないユーザーIDをセッションを介して送るのをやめる。
= セッションクッキーを消す。
で当座は凌げるが、抜本的には
サーバで
* 存在しないユーザーIDと分かった(current_userメソッドで RecordNotFound が発生した)とき、
** ユーザーIDをセッションから消す
** セッションをまるごとリセットする
などの対応をする。
990 :
nobodyさん :2013/10/20(日) 17:01:06.75 ID:fxS1kk8p
>>989 完璧な御回答ありがとうございます。
current_userメソッドを改造すればいいわけですね・・・
ifとかで場合わけするのでしょうか・・・
ちょっと調べてみます。
ありがとうございました。
991 :
あ :2013/10/20(日) 17:19:40.84 ID:???
yum install nginxだとバージョンが1.0.15になるんだけど 新しいバージョンの1.5.4とだとパフォーマンスは大きく変わるかな? ちなみにRails3.2.11 あまり変わらないならyumのほうを入れようと思う
997 :
nobodyさん :2013/10/20(日) 20:40:14.09 ID:fxS1kk8p
>>990 やべ、分かりません(笑)
ちょっとどなた様か、コードのヒントをくださいませ><
998 :
nobodyさん :2013/10/20(日) 22:59:07.82 ID:Hy7aQ34j
>>997 find(ID) は見つからなかったとき例外 ActiveRecord::RecordNotFound を投げるので、
方法1: rescue ActiveRecord::RecordNotFound で見つけられなかった場合の処理を書く(@current_user = nilとするなど)
方法2: find_by_id(ID) か where(id: ID).first にする (例外にならず、 nil を返す)
の2とおりの方法が考えられる。
999 :
nobodyさん :2013/10/20(日) 23:30:25.22 ID:aepowEVY
Rails4技術者認定シルバー試験 こんなのが秋から始まるのですね!? ってことは、rails4対応の参考書とかも充実してくるのでしょうか・・・ 今は海外の英語本を読まなければならずしんどいです。 TOEICはそこそこですが、そもそも未知の領域の学習なのでできれば母国語が良い。 ここにいる皆様ならもう必要ないかもしれませんが・・・
【RoR】Ruby on Rails Part17
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。