【RoR】Ruby on Rails Part13
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2011/11/04(金) 17:06:24.32ID:???【Ruby】Ruby on Rails Part12
http://hibari.2ch.net/test/read.cgi/php/1311050686/
■参考サイト
<英語>
本家:http://rubyonrails.org
API document:http://api.rubyonrails.com/
開発者のblog:http://weblog.rubyonrails.org/
参考wiki:http://wiki.rubyonrails.org/rails
http://ruby-toolbox.com/
http://rubygems.org/
http://agilewebdevelopment.com/plugins/top_rated
<日本語>
Rails' wiki: http://wiki.fdiary.net/rails/
http://twitter.com/dhh
http://www.loudthinking.com/
0963nobodyさん
2012/02/16(木) 07:15:32.07ID:???0964nobodyさん
2012/02/16(木) 09:05:15.33ID:???思いつきだけど
0965nobodyさん
2012/02/16(木) 09:07:41.24ID:EHmdvyte0966nobodyさん
2012/02/16(木) 10:22:54.95ID:???0967nobodyさん
2012/02/16(木) 11:45:27.27ID:???0968nobodyさん
2012/02/16(木) 11:51:31.84ID:gUT9ymRS確かに普通にhtmlでフォームを作ればできる感じはしますね
あと空のオブジェクトを作る方法でもできる気はします(多分)
でも自分の勉強がメインなので、の空のオブジェクトを作らない かつ ビューヘルパーを使ってやりたいなぁ、と思うので
form_tag等を使う方法で挑戦してみようかと思います
0969nobodyさん
2012/02/16(木) 12:40:37.09ID:gUT9ymRS結局目的のform_tagを使ってcreateアクションにpostして掲示板のレスを作ることには成功しました
ただ<%= form_tag({:controller => 'posts',:action=> 'create'}) do %> の様に指定したら
routing error(no route)が返って来てしまいました
結果的には強引な感じはしますが、urlヘルパーを使って<%= form_tag(topic_posts_path(@topic),:method => 'post') do %>
の様に指定したらうまく書き込みができました ネストされたルーティングを使っているため上の様になりました
{:controller => 'posts',:action=> 'create'}の様なコントローラとアクションの指定では、なぜうまく行かないのでしょうか?
rake routes するとちゃんと以下のようにはなっています
POST /topics/:topic_id/posts(.:format) {:action=>"create", :controller=>"posts"}
0970nobodyさん
2012/02/16(木) 13:29:38.29ID:???どこで覚えたか知らないが、もうその書き方古い。Rails 1系の時はそれしか無かったけど。
form_for @post do |f|
でいける。@postをきちんと作ってれば。
0971nobodyさん
2012/02/16(木) 13:47:21.30ID:???ID付きって事は更新用、scaffoldでいうところのupdateでしょ
create相当のことやるんならIDなしroute
というかscaffoldから始めたら?
0972nobodyさん
2012/02/16(木) 14:47:58.94ID:???で済む話では?
0973nobodyさん
2012/02/16(木) 17:10:38.51ID:xHJ9ppvJ今回Railsで初めてアプリを作っていて、ほぼ完成したので
初めてproduction環境でサーバを起動して動かしてみたのですが、
ログに以下のように表示されます。
cache: [GET /] miss
cache: [GET /assets/application.css] miss, store
cache: [GET /assets/img1.png] stale, invalid, store
cache: [GET /assets/img2.png] stale, valid, store
...
これは、どこかに何か問題があるのでしょうか?
そしてmiss, stale, invalid, store はそれぞれ何を意味をしているのでしょうか?
辞書などでstaleを調べると「新鮮でない」とかですけど、ファイルによって
stale, invalid
stale, valid
だったりして、何が良くて何がダメなのかいまいちわかりません。
Rails3.2.1でアセットをプリコンパイルして
production.rbの設定は以下のようにしています。
config.serve_static_assets = true
config.assets.compress = true
config.assets.compile = true
config.assets.digest = false
0974nobodyさん
2012/02/16(木) 18:14:17.54ID:???0975nobodyさん
2012/02/16(木) 21:22:21.58ID:???デフォルトではエラーがでたので検索で調べたら設定があることを知って
今のところ、弄ってなんとか動く設定にしただけという感じです。
production環境での正常なログとは、本来どんな感じなのでしょうか?
0976nobodyさん
2012/02/16(木) 21:56:18.65ID:???2つのモデル(テーブル)
wokerとphoneがあります(両方scaffoldで作成)
workerモデルには has_one: phone
phoneモデルには belongs_to: woker
accepts_nested_attributes_for : woker
のようにしアソシエーションおよびネストを組んであります。
もちろんphoneモデルにはwoker_idのカラムがあり、telという電話番号(tel)のstringカラムもあります。
そこでview/woker/edit.html.erb
にアソシエートしたphone.tel を表示して、そこからテーブルをまたいでphoneの関連レコードも一緒に更新しようとしています。
その際に下記のようにfields_forを使うと、アソシエート先のカラムの表示(中身のデータも)はきちんとされます。
しかし、更新ボタンを押してもアソシエート先のphone.telへ変更が反映されません。一体なぜでしょうか?
<%= form_for @worker, :url => { :action => "create" } do |worker_form| %>
<%= worker_form.text_field :name %>
<%= fields_for @worker.phone do |phone_form| %>
<%= phone_form.text_field :tel %>
<% end %>
<% end %>
0977nobodyさん
2012/02/16(木) 22:21:31.19ID:DriUyt2Hhttp://vermelho.jugem.jp/?eid=119
0978nobodyさん
2012/02/16(木) 22:52:33.55ID:???まず設計がそもそも悪い。
なんでworker has_one phoneなの?
一つ以上持ってたら?
普通は workerのカラムに phoneをいくつか持たせると思う。
それは置いといて、問題の件は
nested_attributes_for と fields_for の使い方間違ってる(nested_attributes_for 付けるモデルと、fields_for の引数)。
ちゃんと調べ直した方が良い。
0979nobodyさん
2012/02/16(木) 22:59:50.92ID:???返信ありがとうございます。
Railsの書籍を3つほど持っているのですが残念ながら、
フォームで関連モデル先のカラム内容までを更新する方法が記載されていません。
試行錯誤しながらネットで調べていたところ、ネストを使えば良いみたいなことが書いてあったので、
お試し的にwork has one phoneという形でテストしているところです。
書籍に載っていなかったことを実現したいので
何をキーワードに調べたら良いものか分からずにいます。
知識不足ですみません。
0980nobodyさん
2012/02/16(木) 23:02:33.32ID:???<%= form_for @worker, :url => { :action => "create" } do |worker_form| %>
<%= worker_form.text_field :name %>
<%= fields_for @worker_form.phone do |phone_form| %>
<%= phone_form.text_field :tel %>
<% end %>
<% end %>
0981nobodyさん
2012/02/17(金) 07:33:58.84ID:???掲示板の投稿記事みたいなもので、関連項目をつけたいんだけど
同じArticleモデル内でで
親子丼 →関連項目 : カツ丼、うな丼、卵とじ
カツ丼 →関連項目 : うな丼、親子丼、カツカレー
こんな風にしたい
0982nobodyさん
2012/02/17(金) 07:43:13.75ID:???nested_attributes_for をググるだけで出てくる。
コントローラでbuildするのも忘れないように。
0984nobodyさん
2012/02/17(金) 11:41:41.03ID:???自己結合(Self Joins)
0985nobodyさん
2012/02/17(金) 12:18:35.23ID:???http://japan.zdnet.com/blog/yoshimi/2007/11/22/entry_27016437/
0986nobodyさん
2012/02/17(金) 14:38:44.56ID:???コントローラーで込み入った処理をしたいんですが
分割したメソッドはどこに置くべきでしょうか
コントローラー内でよい?ヘルパー?
その場合はrspecでどう試験できますか?
class HogeController
def index
@foo = bar
end
def bar
"BAR"
end
end
describe HogeController do
describe :bar do
it "returns 'BAR'" do
(barの戻り値).should eq("BAR")
end
end
end
0987nobodyさん
2012/02/17(金) 16:22:54.21ID:???・まずはModelに突っ込めないか考える
・完全独立ならlibの下。もっと突き抜ければgem化
てな感じかと
0988986
2012/02/17(金) 18:00:46.78ID:???ありがとうございます、でもそこまでは込み入ってないです
ifの条件だけ切り出して、
個別にテストできたらなと考えています
Modelはありません
0989nobodyさん
2012/02/17(金) 20:13:46.89ID:2+La73VF* 最終的に所定のインスタンス変数がセットされ、
* 適切なビューがレンダリングされるか、
がテストできていれば、分割した個々のメソッドをテストする必要は
ないと思うんだけど。
0990nobodyさん
2012/02/17(金) 22:13:19.19ID:???よくネットサービスを見ていると
アクション名やパラメータなどはURLに表示されず
/?token=g6kuo396hbdwiou8b6e38001s
のようにワンタイムセッションのようなもので
画面の遷移を行っているのを見かけます。
railsの場合だと
hoge.com/users/1/show
だと数字の部分をカウントアップしていくだけで
他レコードの情報まで表示して取り出せてしまいます。
これを上に書いたようにワンタイムセッションのように遷移先を管理したり、
URLのコントローラー部分やアクション部分を偽装する方法があれば教えてください。
0991nobodyさん
2012/02/17(金) 22:40:10.70ID:???もちろん他のデータが見えてはいけないものもある。TwitterのDみたいに。
それはデータ引っ張ってくる段階、コントローラ側で弾く。
ワンタイムトークンが必要なものはそのように実装する。
ただCSRF対策とかはもう入ってるから、GETに使うのは結構限られる。
0992nobodyさん
2012/02/17(金) 22:42:00.17ID:???0993nobodyさん
2012/02/17(金) 23:28:42.83ID:???連番が嫌なら出ないようにするって
・idカラム(数字)の代わりにurlカラム(IDの代わりの用途の文字列)を用意する
・ルーティングの設定でURLが見えないようにする
って意味ですか?
0994nobodyさん
2012/02/17(金) 23:34:03.69ID:???例えば、とあるデータサイトを作ったとして
訪問者(プログラマ)にサイト内クローラーを作られ情報を自動収集されたくない場合は
それなりのルーティングを組む必要がありそうです。
何か参考意見はありませんか?
0995nobodyさん
2012/02/17(金) 23:34:52.52ID:???0996nobodyさん
2012/02/18(土) 00:00:06.15ID:???hoge = Digest::MD5.new.update('aiueo')
http://yakinikunotare.boo.jp/orebase/index.php?Ruby%2FMD5%B4%D8%BF%F4%A4%C7%A5%CF%A5%C3%A5%B7%A5%E5%C3%CD%C0%B8%C0%AE
http://www.ruby-lang.org/ja/old-man/html/Digest_MD5.html
0997nobodyさん
2012/02/18(土) 00:03:25.87ID:xUPBYEV4サーバー側には一切データはないってこと?
だとすると、そのクッキー(セッション)が正当なものだって判断はどうしてるの?
0998nobodyさん
2012/02/18(土) 00:07:24.44ID:FrtCmEYTクッキーもセッションも、ブラウザにデータを保存させる仕組み。
http://d.hatena.ne.jp/willnet/20080531/1212239850
0999nobodyさん
2012/02/18(土) 00:34:37.37ID:FrtCmEYThttp://kohada.2ch.net/test/read.cgi/php/1329492840/l50
1000nobodyさん
2012/02/18(土) 00:35:11.19ID:FrtCmEYT10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。