【Ruby】Ruby on Rails Part8
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/09/13(日) 20:49:34ID:kz4rC4Dxhttp://pc11.2ch.net/test/read.cgi/php/1241100447/
■参考サイト
<英語>
本家:http://www.rubyonrails.org
API document:http://api.rubyonrails.com/
開発者のblog:http://weblog.rubyonrails.org/
参考wiki:http://wiki.rubyonrails.org/rails
<日本語>
Rails' wiki: http://wiki.fdiary.net/rails/
■参考スレ(プログラム板)
Rubyについて Part 37
http://pc12.2ch.net/test/read.cgi/tech/1251029267/
Ruby 初心者スレッド Part 30
http://pc12.2ch.net/test/read.cgi/tech/1249687283/
0320318
2009/10/28(水) 17:48:49ID:/NsMtcRB>>既存DB弄れないのはよくあること。
まぁだからもちろん、「そのDBを、新しく作るrailsアプリからしか使わないんだったら」なのだけれど。
313が業務じゃなくて個人的に色々作ってる人のような気がしたので、
だったらDBの定義変更もできるんじゃないかなと思って。なんとなく。
0321nobodyさん
2009/10/28(水) 17:57:57ID:???うまくいきません、どうやったらよいものでしょうか?
0322nobodyさん
2009/10/28(水) 17:59:40ID:???0323nobodyさん
2009/10/28(水) 18:00:59ID:???form_forとsubmitで、同じフォームのデータに「送信」ボタンと「送信とプレビュー」ボタンの2つをつけたいと思っています。
「送信」ボタンでは、/hage に送信し、
「送信とプレビュー」では /hage/preview に送信し別窓で開きたいと考えています。
どのように実現するのが早いでしょうか?
JavaScriptを絡めないと無理なものでしょうか?
0324nobodyさん
2009/10/28(水) 19:55:21ID:???submitを一つのformに複数置く場合、アプリではsubmitを名前で
区別して動作を変えることができる。
結果表示の方だが、確か、formにも target="_blank" を指定できたと
思う。ただし、今回は、一つのformの複数のsubmitという条件なので、
片方のときだけ、実際にサーバにデータを送る寸前にtargetをすり替える
ようなJavaScriptを用意する必要があると思う。
0325nobodyさん
2009/10/29(木) 09:41:06ID:???サンクス
そっか、submitの名前で区別して別の処理すればいいか
target="_blank"相当のボタン押下時の埋め込みですが、JavaScript試してみます。
というか、ちょっと試してみて、上手く言ってないので、JavaScript関連スレでお聞きしたいと思います。
ありがとうございました
0326313
2009/10/29(木) 11:06:29ID:???>>319
提案とお気遣いありがとうございます。
使用しているDBは別のフレームワークで利用しているもので、
それにRailsで拡張アプリみたいにしてみたかったのでカラムの変更なしが前提でした。
でも本来ならばRails方式に変更した方がいいし、別フレームワークでもRailsと同じ方式でカラム命名ができるので、
Rails側アプリが巨大化する前に手をうとうと思います。
Railsの生産性の高さに元アプリから作り直しそうな勢いですw
0327nobodyさん
2009/10/30(金) 02:39:16ID:???2系で作って大幅改修が嫌だから待ってるのだが遅すぎるわ
0329nobodyさん
2009/10/30(金) 07:45:24ID:???これのつもりだったが
http://www.amazon.co.jp/Professionelle-Webentwicklung-mit-Ruby-Rails/dp/3826655400/ref=sr_1_10?ie=UTF8&s=english-books&qid=1256856141&sr=8-10
これはもうすぐ出るんだな
http://www.amazon.co.jp/Beginning-Rails-Jeffrey-Allan-Hardy/dp/1430224339/ref=sr_1_1?ie=UTF8&s=english-books&qid=1256856141&sr=8-1
よく見たら上のはドイツ語だった・・・
0330nobodyさん
2009/10/30(金) 08:21:29ID:???0331nobodyさん
2009/10/30(金) 08:22:43ID:???0332nobodyさん
2009/10/30(金) 12:38:37ID:???0335nobodyさん
2009/10/31(土) 10:44:38ID:???The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.
というページが表示されます。Apacheを再起動してみましたが、表示されないままでした。
以前からあったページにはアクセスできますし、Mongrelを立ち上げてローカルからはアクセス出来ます。
production.logを確認してみましたが、何も書かれていませんでした。
環境はFedora10 + Apahe + passengerです。
どなたか解決方法を教えて頂けないでしょうか。 よろしくお願いします。
0336nobodyさん
2009/10/31(土) 11:17:28ID:???そのエラーてどこのレベルでててるんだろ。
真ん中に赤枠があって、その中にエラー文字列があるなら、Railsがエラーはいているだろうけど
apacheのログ確認してみた?
0337nobodyさん
2009/10/31(土) 11:49:10ID:???ログの見方はよく分からないのですが、Railsで用意された404が表示されているみたいです。
0338nobodyさん
2009/10/31(土) 12:10:24ID:???追加したってこと? Railsの機能を追加したってこと?
0339nobodyさん
2009/10/31(土) 12:47:05ID:???0340nobodyさん
2009/10/31(土) 12:59:55ID:???developmentモードで動かしてみる
→Passengerの設定にRailsEnvというのがある。
または、
productionモードのまま、ログレベルを:debugに変更
→config/environments/production.rbを弄る。
などでより詳しい情報を得ることを勧める。
0341nobodyさん
2009/10/31(土) 13:34:57ID:???0342nobodyさん
2009/10/31(土) 14:46:41ID:???Routing Error
no route found to match "/financial_statements" with{:method=>:get}
という表示に変わりました。routes.rbに何か設定を追加すればよいのでしょうか?
0343nobodyさん
2009/10/31(土) 14:50:58ID:???0344nobodyさん
2009/10/31(土) 15:00:09ID:???してほしいなら、あなたが追加したコントローラとそいつのメソッド
がそのURLにマッピングされなければならない。
rake routes してみるとおそらく /financial_statements に反応する
ルールがないはず。
routes.rbに
map.resources :financial_statements とでも書けばいいんじゃない?
0345nobodyさん
2009/10/31(土) 15:39:28ID:???map.resources :financial_statementes は上手くいきませんでした。
同じようなURL(/controllername)はマッピング出来ているのに/financial_statementsはエラーになる理由がよく分からないです。。
0346nobodyさん
2009/10/31(土) 15:42:24ID:???rake routes しつつ、試行錯誤してくれい。
0347nobodyさん
2009/10/31(土) 19:08:53ID:???質問です
RoRはWindows7で動作しますか?
0348nobodyさん
2009/10/31(土) 20:26:19ID:???0349nobodyさん
2009/11/05(木) 17:41:39ID:???日本語最新版『RailsによるアジャイルWebアプリケーション開発 第3版』が、
この2009年11月末にオーム社より発行されます。
ついにでるー.
0350nobodyさん
2009/11/05(木) 21:57:32ID:???d
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?&ISBN=978-4-274-06785-3
0351nobodyさん
2009/11/05(木) 23:41:40ID:???どっちがいいかな
0352nobodyさん
2009/11/06(金) 01:47:30ID:???strSQL="select count(*) as cnt ,fk_table_id from datas where del_flg=0 group by id order by count(*)"
hoge=Data.find_by_sql(strSQL)
--------
<table>
<%for i in (0..hoge.length-1) %>
<tr><td><%=hoge[i].fk_table_id%></td><td><%=hoge.cnt%></td></tr>
<%end %>
</table>
-----------------
ですが、ときどき
undefined method `fk_table_id`
というエラーがエラーログに出ています。
何か対処方法はないでしょうか?
sqlは一例で、日によって発生場所がまちまちになっています。
環境
os centos
ruby 1.8.7 p-174
rails 2.1.2
mysql tritonn-1.0.12-mysql-5.0.67
クエリキャッシュを有効にしていたのですが
エラーの出現回数があまりに多いので
毎回クリアさせてみたところ多少減りました。
0353nobodyさん
2009/11/06(金) 01:47:47ID:???0354nobodyさん
2009/11/06(金) 03:08:33ID:???正直2.3系はあまり困ってない
0355nobodyさん
2009/11/06(金) 17:55:44ID:???/lib/xxx.rbのモジュールをControllerでincludeして利用しています。
BackgrounDRb(/lib/workers/yyy_worker.rb)でも
xxx.rbのモジュールをincludeして利用したいのですがどうすればいいでしょうか?
0356nobodyさん
2009/11/07(土) 00:52:56ID:ygEaPrn0目的:下記条件下で、new.html.erbから名字と子供のnameを登録したい。
テーブル
Parent
id:
myoji:
Child
id:
parent_id:
name:
という二つのテーブルがあり
それぞれのモデルには、
has_one :child
belongs_to :parent
を指定しています。
0357nobodyさん
2009/11/07(土) 00:54:17ID:ygEaPrn0コントローラーには、
main.rb
def new
@user = Parent.new
end
def create
@user = Parent.new(params[:data])
@user.save
end
Viewのnew.html.erbには
<% form_for :parent,@user,:url=>{:action=>'create',:id=>@user} do |form|%>
名字:<%= form.text_field :myoji %>
名前:<%= form.text_field :name %>
<%submit_tag '登録'%>
<%end%>
とします。
間違っているところを具体的ご指摘いただけないでしょうか。
rails rubyなどは最新バージョンです。
0358nobodyさん
2009/11/07(土) 01:01:03ID:ygEaPrn0@user = Parent.new(params[:data])
ではなく、
@user = Parent.new(params[:user])
だと思うのですが、、、まちがってますよね。。。
0360nobodyさん
2009/11/07(土) 02:36:17ID:???なんかよく分からないけどヒントください、みたいな。
0361nobodyさん
2009/11/07(土) 02:36:32ID:ygEaPrn0いろいろ変えてやってみたのですがいろいろなエラーで
収集がつかなくなったので、根本的に、基本的なところで
どう間違っているのか、指摘してもらえればありがたいなーと
思いまして。。(^^;;
0362nobodyさん
2009/11/07(土) 02:39:37ID:???その結果どういうエラーが出たのか、
具体的に示さないとあかの他人がアドバイス出来るはずないでしょ。
0363nobodyさん
2009/11/07(土) 08:13:45ID:???0364nobodyさん
2009/11/07(土) 08:40:04ID:???どうしたらいいの?
いったん再起動するの?
0365nobodyさん
2009/11/07(土) 09:14:59ID:iBTE7BNg0366nobodyさん
2009/11/07(土) 09:15:41ID:???するからとりあえずOSとかいろいろ教えれ。
0368nobodyさん
2009/11/07(土) 09:53:27ID:iBTE7BNg0369nobodyさん
2009/11/07(土) 11:37:51ID:???0370nobodyさん
2009/11/07(土) 12:03:22ID:???0371nobodyさん
2009/11/07(土) 12:07:23ID:???ubuntu 8.04をxp上のvmware playerで動かしてる
メモリの割り当ては512M
monitなどで再起動か
なるほろ
0372nobodyさん
2009/11/07(土) 12:14:14ID:???箇所を実際に再利用できるようにすることなので、
OSにメモリを返すという意味ではない。
0373nobodyさん
2009/11/07(土) 14:27:25ID:???どうして再起動しないと固まるんだろうw
0374nobodyさん
2009/11/07(土) 15:00:41ID:???0375nobodyさん
2009/11/07(土) 16:06:55ID:???0376nobodyさん
2009/11/07(土) 16:36:34ID:???0377nobodyさん
2009/11/07(土) 16:40:02ID:???modelに書く処理をmoduleにまとめておきたいのですが、うまく行きません。
module内にnamedscopeの定義をまとめて書いたのですが、
undefined method `named_scope' for ModelSupport:Module
などといわれてしまいます。
現在は例として以下のような感じで記述しています(名前は例なのでつっこまないで)
item.rb(Itemモデル)に
class Item < ActiveRecord::Base
include ModelSupport
end
lib/model_support.rbに、
module ModelSupport
named_scope :new_post, lambda{|num| {:limit => num}}
end
うまく、module化するにはどのように書いたものでしょうか?
0379nobodyさん
2009/11/07(土) 17:02:18ID:???ちょっと試したいだけなら heroku の無料プラン。
>>377
その書き方の場合、named_scope は module ModelSupport のスコープで実行される。
実行されるというのはメソッドが呼ばれるという意味ね。
例)
module Hoge
puts "hoge"
end
#=> hoge
単なるモジュールな ModelSupport は named_scope を知らないので undefined method になる。
で、どうすればいいかというとリフレクションを使う。
module ModelSupport
def self.included(base)
base.class_eval do
named_scope :new_post, lambda{|num| {:limit => num}}
end
end
end
module が include されたときに included が呼ばれるので、
class_eval を使って base(=includeしたクラス)のコンテキストで name_scope を呼ぶ。
0380377
2009/11/07(土) 17:12:43ID:???うほっ!できました、できました!
他のRailsプラグインとかもそういうような書き方しててナンダコレ?とか思ってました。
スコープ考慮しないといけないんですね。
これ、慣用句的な書き方みたいですね。
今までmoduleの中身はincludeした方のスコープで動くもんだと思ってたw そういうことだったのか
0381nobodyさん
2009/11/07(土) 19:06:05ID:???>>じゃあ再起動しなくていいはず
逆。OSには返してないわけだから、基本的にOSから見た
プロセスが食うメモリってのは増える一方。
0382nobodyさん
2009/11/07(土) 19:46:08ID:???プロセスのメモリサイズをいじるのはsbrkとかbrkだっけ?
0385nobodyさん
2009/11/08(日) 02:45:09ID:???script/runnerしてメール処理をしてるのだが、
一度受信したメールが何度も繰り返し送られてくる。
これって、こういうものなのかな?
それとも的確な処理をしてないから?
0386nobodyさん
2009/11/08(日) 02:58:14ID:???0387nobodyさん
2009/11/08(日) 03:13:16ID:???0388nobodyさん
2009/11/08(日) 03:16:34ID:???受信したメールをコマンドで処理するのみで
保存しないようにしても症状は同じ。
受信したときに相手のサーバに的確なメッセージを
返してあげないとダメなのかな?
そういうのはqmailが勝手にやってくれてると思うのだけど…
0390nobodyさん
2009/11/08(日) 11:28:57ID:???0391nobodyさん
2009/11/08(日) 14:55:17ID:???終了コード0返すだけじゃだめなの?
0392nobodyさん
2009/11/08(日) 16:35:04ID:???とかしてもインデックス作られないんだけどCREATE TABLEだけしか実行してくれないの?
0393nobodyさん
2009/11/08(日) 18:22:12ID:???インデックスも正しく作成される。
その前にマイグレーションを使っているのに、わざわざSQLを直接実行するのはなんでだ?
0394nobodyさん
2009/11/09(月) 20:11:21ID:???自動でidに変換してよしなに計らってくれますよね?
例えば、Hoge.find自身もintegerなidじゃない Hoge.firstの返り値などでも通ります。
これを自分の処理でも使いたいのですが、該当するメソッドはないものでしょうか?
ActiveRecordのfindのソースとかたどって見ているのですが、
いまいちわからんとです・・・
環境はRuby 1.8.7、Rails 2.3.4です。
0395nobodyさん
2009/11/09(月) 21:43:53ID:???まずは active_record/base.rb の AR::Base#find から find_one / find_some などを経て
def quote_value(value, column = nil)
self.class.connection.quote(value, column)
end
これは、active_record/connection_adapters/abstract/quoting.rb の
def quote(value, column = nil)
# records are quoted as their primary key
return value.quoted_id if value.respond_to?(:quoted_id)
:
かな。
で、AR::Base に戻って
def quoted_id #:nodoc:
quote_value(id, column_for_attribute(self.class.primary_key))
end
0396nobodyさん
2009/11/09(月) 21:58:57ID:???0397nobodyさん
2009/11/09(月) 23:09:34ID:???0398nobodyさん
2009/11/10(火) 04:32:44ID:???0399nobodyさん
2009/11/10(火) 12:23:52ID:???0400nobodyさん
2009/11/10(火) 15:45:57ID:???無事動作を確認できました!
Item.quote_value(1234) => "1234"
Item..quote_value(Item.first) => "1"
みたいにいけますた。何故か文字列ですがw
find_oneやfind_someになんであるのに、見つけられなかったんだろ、と
ドキュメントを思ってよく見たら
railsのchmファイルって、メソッドのソース表示は長い行だと折り返されないで、
画面外にでてって表示されないっぽいですね orz
他の場面でもソース見ててハマりそうだ・・・。
この辺てCSSとか直したらなんとかなるんかな。
0401nobodyさん
2009/11/10(火) 16:15:53ID:???最終的に文字列が得られるようになってるのよ。
0402nobodyさん
2009/11/10(火) 16:23:20ID:???ああ、確かにドキュメントに
> Quote strings appropriately for SQL statements
と書いてありますね。
quote_〜〜ってメソッドたくさんあるし、なんのことかと思ったら、
SQLのためのクォート処理なんですね。
勉強になりました。
privateメソッドですし、期待する機能と名前が一致しない点もアレなのですが、
とりあえずは実現できるので ActiveRecord::Base::quote_value を使ってみます。
帰り値の文字列はto_iすればいいですし。
ありがとうございました。
0403nobodyさん
2009/11/10(火) 20:20:41ID:???URLに&hoge=true
といったように、フラグや状態(日付とかでもいいです)を記載して、
しばらく、一定のページ遷移まで、&hoge=trueのGETパラメータを付加しつづけるよい方法はありませんでしょうか?
クッキーがいいかと思ったのですが、状態の違うページをいくつか開いた際に破綻してしまいます。
今は、form_forなどの引数にパラーメータを一個一個渡しています。
手動なのでけっこうミスがでてしまいます。
以下のような感じです。
view側:
<% form_tag({:action => :edit, :id => @item}.merge(hoge_params_hash)) do %>
:
<% end %>
コントローラー側:
helper_method hoge_params_hash
private
def hoge_params_hash
params[:hoge] ? {:hoge=> params[:hoge]} : {}
end
例として、ブログやCMSのプレビュー用のモードというか、プレビューボタンを押した後指定のページ遷移までは
フラグ立てたまま処理する(「プレビュー中です」のような表示をしたい)というような場合や
食べた食品を記録するサイトで、ある日に記録するデータを検索窓から検索した場合、
その検索後のページ場合もそのある日を覚えておいて、記録時に使いたいといった場合です。
設計の問題なのかもしれませんが、ぜひご助言ください。
0404nobodyさん
2009/11/10(火) 22:01:55ID:???0405nobodyさん
2009/11/10(火) 22:09:57ID:???application_controllerにチェックするメソッド定義して、各コントローラでfilterで呼ぶとか。
filterを工夫すればいいんじゃないの?
0406nobodyさん
2009/11/10(火) 22:11:23ID:???例えば、link_toの場合は、こんな感じで書くとGETパラメータを付加してくれる。
formでも同じ事ができるかは分からないが。
<%= link_to("編集", :action => :edit, :id => @item, :params => params) %>
0407403
2009/11/11(水) 09:59:21ID:???そういうことが聞きたいのです。
セッションだと、
>>403の下のブログやCMSの例でいえば、プレビューと実際の画面表示のコードを共有していた場合、
プレビュー中に、実際の画面みようとしてもプレビュー表示になってしまいますよね。
食品の記録サイトでいえば、別のタブで同時に別の日を入力しようとしていた場合、
セッションにある値しかつかわれないので、セッションにある日しか同時に入力できないことになります
つまり、セッションだと状態を1つしかもてない、という意味なのですが・・・
ま、仕様です、と言えば、それでもいいのかもしれませんがw
>>406
あ、いえ、今もそんな感じでやってるんです。
>>403のコード例がわかりにくいのですが、
form_tag でGETパラメータを指定しています。
ただし、指定するかは今のページのGETパラーメータを見てから。
>>404
確かにformならhiddenでもいいですね。GETパラメータでやらなくてもいいか
0408nobodyさん
2009/11/12(木) 03:49:23ID:K53v7ACDつかってファイルを選ぶ方法しかないのでしょうか?
クライアントがパスを書いてそこにあるファイルをサーバに保存する
ことは不可能ですか?
0409nobodyさん
2009/11/12(木) 04:51:31ID:???0410nobodyさん
2009/11/12(木) 15:35:06ID:???0411nobodyさん
2009/11/12(木) 15:36:59ID:???HogeControllerがあり、publicなメソッドとしてFoobarを新たに追加しました。
デフォルトのルーティングだと、
/hoge/foobar
でアクセスできるのですが、プログラム上からは
foobar_hoge_path()
が使えません。
rake routesしても載ってないのですが、
これって、routes.rbに
map.resources :hoge, :member => { :foobar => :get }
などとかかなくてはいけないものなのでしょうか?
0412nobodyさん
2009/11/12(木) 22:47:21ID:???返ってきた結果セットがほぼ同時に別プロセスで
実行していた別なSQLのものに変わってしまっています。
mysqlの設定などでチェックすべきところとかないでしょうか?
0413nobodyさん
2009/11/12(木) 23:21:24ID:???無指定の map.resources だけだとそこまで面倒みてくれない。
map.resources に追加するか、昔ながらのやり方で
map.foobar_hoge 'hoge/foobar', :controller => 'hoge', :action => 'foobar'
のように定義してやるとか。
0414nobodyさん
2009/11/12(木) 23:37:15ID:???やったことないけど
0415411
2009/11/14(土) 04:27:35ID:???ありがとうございます。
こちらでも試してみましたが、やはり、必要なのですね。
>>411のは間違ってまして、/hoge/foobarの場合は、
map.resources :hoge, :collection => { :foobar => :get }
でした。
/hoge/1/foobarなら、>>411のでいいみたいです。
0416nobodyさん
2009/11/17(火) 14:03:16ID:???psousa's baseapp-orange at master - GitHub
http://github.com/psousa/baseapp-orange
以前でてたBaseAppというRailsのテンプレみたいなのの派生verがあるのを発見して
動かしてみようと思ったんですが、うまく行きません。
READMEにあるように、mysql用のdb設定をdatabase.ymlにして、
rake db:migrate
したのですが、
Missing these required gems:
capistrano-ext
と言われてしまいます。
vendor以下を見るとfreezeされているのか、必要なgemなど全部入っているようなのですが、このように言われます。
config/enviroment.rb には、
config.gem "capistrano-ext", :lib => "capistrano"
のような記述があり、
rake gems:install
とするのですが、何ごともなく終了します。
どうしたものでしょうか?
0417416
2009/11/17(火) 14:16:18ID:???ないならgemいれればいいんじゃね?という当たり前の結論で、
gem install capistrano-ext
したら、無事に通りました。(db:migrateでDBないと言われたので、rake db:createしましたら行けました)
しかし、何でこんな動作になっているのだろう?
なるべくシステムに入っているgemを使いたいのですが、満載のvendor/gems以下や、vendor/rails以下は
手動で削除しちゃっていいものなのでしょうか?
0418nobodyさん
2009/11/17(火) 16:12:30ID:???0419nobodyさん
2009/11/17(火) 16:13:42ID:???■ このスレッドは過去ログ倉庫に格納されています