1 :nobodyさん:2011/07/19(火) 13:44:46.30 ID:zxrusyvr
■前
【Ruby】Ruby on Rails Part11
http://hibari.2ch.net/test/read.cgi/php/1292032736/

■参考サイト
<英語>
本家: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/

13 :nobodyさん:2011/07/21(木) 13:41:48.70 ID:bT1+m3ud
はじめまして
Rails2.3.8

view/hoge/index.html.erbにて
DB:hogesのhoge.fooとhoge.barをプルダウンの要素にして、
絞り込むUIを作ろうとしています。

[hoge.foo▼] [hoge.bar▼] 《検索》
<tabale> ?? </table>

画面を開いたときは、table部は全レコ表示
プルダウンでfooとbarを選択→検索押下で、
foo=value1、bar=value2で絞り込んだレコードだけ表示
プルダウン未選択の場合はすべて表示

解説ページか、サンプルコードを紹介願います
当方、非コーダのシステム部員でレベル低いです

38 :nobodyさん:2011/07/22(金) 18:33:21.70 ID:Uhqw0ffO
拾ってきたrailsのサンプルファイルをtestフォルダに展開して
$ cd test
$ rails s
としたときに下記のエラーが出てきてサーバーが立ち上がりません。
どうすればいいでしょうか?

Usage:
rails new APP_PATH [options]
Options:
-r, [--ruby=PATH] # Path to the Ruby binary of your choice
# Default: /Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/bin/ruby
-d, [--database=DATABASE] # Preconfigure for selected database (options: mysql/oracle/postgresql/sqlite3/frontbase/ibm_db)
# Default: sqlite3
-b, [--builder=BUILDER] # Path to an application builder (can be a filesystem path or URL)
-m, [--template=TEMPLATE] # Path to an application template (can be a filesystem path or URL)
[--dev] # Setup the application with Gemfile pointing to your Rails checkout
[--edge] # Setup the application with Gemfile pointing to Rails repository
[--skip-gemfile] # Don't create a Gemfile
-O, [--skip-active-record] # Skip Active Record files
-T, [--skip-test-unit] # Skip Test::Unit files
-J, [--skip-prototype] # Skip Prototype files
-G, [--skip-git] # Skip Git ignores and keeps
中略
Description:
The 'rails new' command creates a new Rails application with a default
directory structure and configuration at the path you specify.
Example:
rails new ~/Code/Ruby/weblog
This generates a skeletal Rails installation in ~/Code/Ruby/weblog.
See the README in the newly created application to get going.

41 :nobodyさん:2011/07/22(金) 20:10:24.08 ID:QEp81h1s
>>38

サンプルがRails3用でないために本来の動作をしているように見える。

script/rails があれば、railsコマンドはそいつを実行する。
そうでなければ本来のアプリひな形作成コマンドとしての動作をする。


66 :nobodyさん:2011/07/23(土) 03:35:43.27 ID:???
MySQLのパスワードが違っている。
OSのアカウント管理とは独立してMySQLのアカウント管理があるので、
rootのpasswordはシステムのそれじゃなくてMySQL用に別途設定するのだけど、設定してある?

設定してないなら、
# mysqladmin -u root password (新しいパスワード)

設定しているなら、
$ mysql -u root -p -S /tmp/mysql.sock db_development
(パスワード入力)
してアクセスできるか試してみれ。



100 :13:2011/07/25(月) 12:01:23.68 ID:IAHMsfps
collection_Selectを4つ作り、controllerに渡して各パラメータを
@collection=で
[" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット']
というふうに整形しました。
これを
view/vegetables/index.html.erbで
<% @vegetables = Vegetable.find(:all, :conditions=>@condition).each do |vegetable| -%>
として実行すると
undefined method `%' for ["[\""]:Arrayというエラーが出ます。

整形したものをべた書きすると綺麗に通りますが、@collectionで代入すると
エラーです。

何故でしょうか?


105 :13:2011/07/25(月) 14:01:51.45 ID:IAHMsfps
>>100 のものです。
<% @vegetables = Vegetable.find(:all, :conditions=>@condition).each do |vegetable| -%>

<% @vegetables = Vegetable.find(:all, :conditions=>[@condition]).each do |vegetable| -%>
としましたが、結果は同じでした。

@conditionが別に定義されているかも知れないので@cndなど別の変数にしたが結果は同じでした。

undefined method `%' for ["[\""]:Arrayというエラーはググッても1件も出てきません・・・。

当方Rails2.3.8です。

宜しくお願い致します。


106 :nobodyさん:2011/07/25(月) 16:34:48.91 ID:???
>>105
Rails2.3.8で似たようなコードを書いてもエラーにはなりませんでした。
そもそも、[ "[\"" ] というlength=1の配列はどこから来ているのかが気になりますね。

@conditionの定義部分でタイポとかないでしょうか?

107 :13:2011/07/25(月) 16:45:54.91 ID:IAHMsfps
>>106
vegetables_controller.rbに
if params[:hinmoku_id]
@cnd = []
@cnd << ["[ \""]
@cnd << ["hinmoku = ? "]
end
と、直書きしてます。

でも@cnd << ["[ \""]を削っても、
undefined method `%' for ["hinmoku = ? "]:Array
となって同じでした。

143 :nobodyさん:2011/07/29(金) 15:17:50.97 ID:NreIb2ba
既存のレコードをeditで編集し変更した内容を
submitボタンを2つにしてそのままupdateと新規insertにしたい。

もしくはレコードのコピー+idの採番

をしたいのですが、どうやったら可能でしょうか?


145 :nobodyさん:2011/07/29(金) 17:33:27.53 ID:NreIb2ba
143です。
もしくは、indexのshow | edit | destroyにcopyとつけても良いです。

試しにlink_to '複製', new_vegetable_path(vegetable)としたら
真っ白になりました・・・。


149 :nobodyさん:2011/07/30(土) 01:02:16.68 ID:???
>>145
copyの方がviewの無理がないので、自分ならそっちにします。

newに飛ばしても当然ダメなので、controllerにmethod追加かな。

191 :143:2011/08/02(火) 10:44:58.57 ID:gvG35C3d
def copy
@vegetable_g = Vegetable.find(params[:id])
@vegetable_h = Vegetable.new(params[:@vegetable_g])

respond_to do |format|
if @vegetable_h.save

やはり、@vegetable_h = Vegetable.new(params[:@vegetable_g])にパラメータが入らないのが原因のようです。
いろいろ試しているのですが・・・・。

208 :143:2011/08/05(金) 13:05:10.41 ID:kWLQpcrd
おかげさまで、アプリが完成しました。ご助言有難う御座います。

完成したので、DBをPostgreに移行しようと思い、yaml_dbというプラグインで
rake db:load RAILS_ENV=development
とし、db/data.yamlファイルを作成しました。

config/database.yamlを
development:
adapter: postgresql
encoding: unicode
database: vegetables_development
pool: 5
username: hoge
password: fuga
とし、

Postgre上でDB、vegetables_development(同test同production)を作成。

rake db:load RAILS_ENV=development
を実行すると、
rake aborted! PGError: ERROR: relation "users" does not exist
というエラーが出ます。(この"users"というのはログイン認証用のTableです)

rake db:migrateを実行しても同じです。

別のRailsを作って、スカッフォード→db:migrateしたら正常に動くので
Postgre⇔Rails間は正常に動いていると思います。

rails2.3.8
rake0.8.7
pg0.11

363 :nobodyさん:2011/09/09(金) 12:32:42.34 ID:???
railsってコロコロとバージョン変わるし
使えるプラグインが使えなくなったり、
新しいバージョンのrailsにしか対応してなかったりするのね。

どのバージョンを機軸に開発していくか悩む。
レンタルサーバーはruby1.8までしか対応してないとこがほとんどだし。

379 :nobodyさん:2011/09/10(土) 00:40:26.80 ID:???
>>363
Rails3.0は2系との互換性を保ったまま、徹底的にリファクタリングしたバージョン
Rails3.1は、2.x系との互換性を完全に切り捨てる最初のバージョン。Rails2で書かれたアプリは動くなくなる
Rails3.0には新機能はあまり入っていない。DSLが“おしゃれ”になった程度
Rails3.1には新機能がいろいろと入っている。Asset Pipelineや、CoffeeScript、HTTP Streaming、Identity Mapなど
Rails3.1で入った機能のうち、例えばIdentity Mapは極めて荒削りな状態で入っていて、「ほんとに実アプリで使うの?」という感じ。3.2になれば、使えるようになる
3.2は3.1の安定版という位置付け。3.1はコントローラ周りが遅い、Safe Buffer周りの実装がすっきりしないなどの課題がある。3.2ではパフォーマンスチューニングをガッツリやる
3.3は、出るかどうか分からない。たとえ出るとしても大きな機能は入らない
これから出るパッチは、Rails 4に入ることになる。4.0の話はもう始っている
Rails 4では、Ruby 1.9でないと動かなくなる
予言しておくと3.1は短命になる。しかし、3.1はとにかく面白いのでどんどん使うべき
3.1でjQueryが標準になった。rails-coreメーリングリストでアンケートを取ったら、すでに8割の開発者がRails3.0でjQueryを使っていた。だから3.0で間違ってprototype.jsを使っている人は、未来がないと思って、jQueryに乗り換えると良い

395 :nobodyさん:2011/09/10(土) 17:38:27.23 ID:???
>>379
詳しい解説ありがとうございます。
初心者が手を付け始めるとしたら、どのバージョンがいいですか?
三ヶ月後のサービス公開を前提として、
利用者が10万UV/dayでも問題ないサイトにしたい場合。





396 :nobodyさん:2011/09/10(土) 17:42:08.74 ID:???
ケータイ(ガラケーやiPhone)でも問題なく見られるものを作りたいんだけどscaffoldしてもdestroyレコードはjavascriptですよね?

色んなケータイからも問題なく見られるサイトにしたい場合
開発のコツとかありますか?

またアクセスカウントを取るときのコツってありますか?
なるべく重複しないように

IPアドレス 且つ cookieに残したユニークキー
が違う場合のみカウントアップを行う!など。

397 :nobodyさん:2011/09/10(土) 17:50:00.49 ID:???
>>396
destroyでjavascriptなんか吐かないのでは。confirmの事なのかな。
携帯はjpmobileで。スマホにはjQuery mobile。
アクセスログが取りたくて、人気サービスじゃなければ google analyticsで。


398 :nobodyさん:2011/09/10(土) 17:59:24.95 ID:???
>>397
ありがとうございます。
confirmですね(確認ポップアップ)
scaffoldだと標準でjavascriptが組み込まれてるようですが、
javascriptに対応してないケータイのためにはviewのコード書き換えてあげないといけないですよね?


別件ですが、会員管理はdeviseなどを使えば簡単に出来そうですが、
例えば会員が登録したメアドを変更したい!となった場合はどうすればいいですか?

関連テーブル「profile」をシリアルIDで予め繋いでおいてって出来そうですが、
メアド変更後の確認メールをクリックして確定!の部分は完全に一から作らなきゃダメですよね?
deviseの会員登録の確認メールの機能を流用出来ればと想っていたのですが。

402 :397:2011/09/10(土) 19:40:28.39 ID:???
>>398
viewは、もちろんPC、スマホ、ガラケーで別々に作る。

jpmobileは、3.1対応まだみたいなので気を付けて。

Deviseに足りない機能は自分で作るのが普通。
個人的にはDeviseはやり過ぎで自由度低いので、Warden使って、他は全部自分で書いてる。
ただ、scaffold使おうとか考えてる時点で、Devise読んで直せるとは思えない…。

ガラケー向けは、絵文字処理や空メール登録とかするなら、Rails2系になるけど、そういう本があるのでそれ見て。ちょっと内容古いが。


412 :nobodyさん:2011/09/10(土) 21:42:54.33 ID:???
さくらのVPS上で開発でもするのかな。
管理画面的なものが欲しいだけなら、scaffoldで良いから、管理画面作っちゃえば良いのに。
php入れないで済むし。
phpmyadmin狙いの攻撃も多いし。


413 :nobodyさん:2011/09/10(土) 21:47:45.76 ID:???
>>412
auto_incrementのリセットやキーワード検索とかまでは
scaffoldでは設定できませんよね?
荒らしが出てきたとき皆さんはどのように対処されてますか?
phpmyadminなら一括検索して一括削除、そしてユーザー情報破棄にできます。


428 :nobodyさん:2011/09/10(土) 23:05:11.24 ID:???
nginxがapacheと同じ位置づけなのは分かるのですが
passengerがどの部分の役割を担っているかが分かりません。

nginxサーバーやapacheサーバーで
ruby(on rails)を動かすための中間的なプラグインみたいなもの

って認識であってますか?

437 :nobodyさん:2011/09/11(日) 02:24:36.14 ID:???
>>428
>ruby(on rails)を動かすための中間的なプラグインみたいなもの
うん、そんな認識でいいと思うよ

passengerが登場するまでは相当面倒だったんだよRailsを動かすの
俺はそれまでMongrelってのをapache上で使ってたんだが、いちいちプロセスの管理したりしないといけないから面倒だった
・一つのRailsアプリに一つのプロセスを割り当てる
・そのプロセスが落ちたらアプリも死ぬのでプロセスを監視して落ちてたら再起動する仕組み(monitとかGod)を導入
・一つのプロセスだと大量にアクセスが来たら対応できないので、いくつかの複数のプロセスを予め用意
・プロセス増やすごとにサーバーのメモリを使うんだけど、あんまりアクセスが無い時でも複数のプロセスを起動させたままなのでメモリの無駄
てな具合に個人で管理するアプリにしては面倒極まりなかった だからあんまり気軽にRailsアプリ作れなかったんだよ
当時はVPSも高かったしね

そこにPassengerが登場して、お手軽にRailsアプリを動かせるようになったってわけ
・Railsアプリをアップロードしてやれば(ほぼ)動くようになる
・プロセスはpassngerが管理するので俺らは考えなくてよい
・アクセスが大量に来たときはプロセスをpassengerが勝手に増やしてくれる
・逆にアクセス少ない時はプロセスを減らしてくれる これでメモリリソースを有効に使える
と良い事だらけなのですよ

さらにPassengerのインストーラーの手軽さときめ細やかさは俺が今までに見た中でも最も優秀な部類に入るし、あの会社は皆若いのに凄いと思う

446 :nobodyさん:2011/09/11(日) 15:39:15.16 ID:b5VayDzx
最初rails扱ったときのmongoidを使っていたのですが、
activerecordでmodelの継承できないのですが?
単一テーブル継承というものは見つけたのですが、
一つのテーブルにuserとgroupのようなものが一緒に
入れても問題ないでしょうか。

472 :nobodyさん:2011/09/12(月) 16:09:42.12 ID:???
Ruby寄りの質問ですがお願いします
ActiveRecordでMySQLのデータを取って来ています
MySQL側のNULLをRubyではてっきりnilにしてくれると思ってたのですが、なんと"NULL"という文字列でした

これ何とかなりませんかね?
真偽判定する時に if data == "NULL" なんてのはちょっと不細工かなあと
できれば if data.blank? とやりたいのです

488 :nobodyさん:2011/09/13(火) 01:21:27.32 ID:pMpaI0Dv
Railsを仕事で使っている方々にお聞きしたいです。
ActiveRecordとDataMapperでは、現在どちらの方がよく使用されますか?
やはり後発のDataMapperのほうが将来性があったりするんでしょうか。



493 :472:2011/09/13(火) 18:31:46.48 ID:???
>>488
DataMapperなんて使ってるのは物好きだけです
Rails標準のActiveRecord一択


http://hibari.2ch.net/test/read.cgi/php/1311050686/l50人気ブログランキングへ