トップページ⇒php
1001コメント389KB

【Ruby】Ruby on Rails Part7

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/04/30(木) 23:07:27ID:???
■前 Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1224838013/

■参考サイト
<英語>
本家: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 35
http://pc12.2ch.net/test/read.cgi/tech/1238194350/
Ruby 初心者スレッド Part 27
http://pc12.2ch.net/test/read.cgi/tech/1238632943/l50
0202nobodyさん2009/05/28(木) 23:27:35ID:???
ためしに主要コンテンツにキャッシュ使うようにしてみたら、かなり早くなったw
0203nobodyさん2009/05/29(金) 03:17:14ID:2GV35QJ0
AWDRのThird Editionを見ているのですが、
外部キーの定義にt.references :userを使わずt.integer :user_idを使っています。
なぜなんでしょうか?
0204nobodyさん2009/05/29(金) 07:49:22ID:???
>>203
それは好みの問題なんじゃないの?
どっちを書いても結果は同じ事になるからね。

0205nobodyさん2009/05/29(金) 21:04:19ID:???
render :update で行う処理をヘルパで定義したんだが、
ヘルパで定義したメソッドから、別のヘルパに定義されているメソッドを呼び出そうとしたら
上手く呼び出せないんだ
なぜかActionView::Helpers::JavaScriptProxy のインスタンスが帰ってくる

どうすればいい?
0206nobodyさん2009/05/29(金) 21:43:02ID:???
どう書いてるのかも分からないのに・・・
0207nobodyさん2009/05/29(金) 23:19:50ID:???
Ruby会議行く人いるー?
0208nobodyさん2009/05/29(金) 23:23:02ID:???
チケット買えたら行く。
去年は会場が広かったせいかわりと余裕があったが今年はどうだろうね。
0209nobodyさん2009/05/30(土) 01:57:19ID:???
wycatsのセッションが楽しみだ
0210nobodyさん2009/05/30(土) 02:36:46ID:???
ruby会議というのに行ってみようと思う ruby 歴2ヶ月のものですが、
チケットは瞬殺してしまうものなのでしょうか?
0211nobodyさん2009/05/30(土) 02:41:08ID:???
セッションスピーカーに「坂本龍一」って人がいるんだけど、
映画ラストエンペラーでアカデミー音楽賞とった人?
0212nobodyさん2009/05/30(土) 06:22:13ID:???
>>211
教授くんの?つかなんでww
0213nobodyさん2009/05/30(土) 10:29:12ID:???
2006、2007年はそこそこ瞬殺(数時間)、2008年は会場が広いのと
東京から遠かったせいか、もっとゆっくりだったと思う。
0214nobodyさん2009/05/30(土) 17:53:01ID:???
railsでGMAILをsmtpサーバーにしてるひといる?
アクティベーション用につかってたんだけど、とづぜんおくれなくなった。

気になるのは、GMAILにログインして送信済みトレイをみるとそのメールは
送ったことになってる。
なお普通にメールは送れる。

なんか同じような手形式のメールばっかりやってたから、迷惑メールのサーバーとして
利用してると勘違いされて、ブロックかけられてるような気がするのだが・・・。
0215nobodyさん2009/05/30(土) 18:19:50ID:???
gmailは送信数制限があったと思うが
0216nobodyさん2009/05/30(土) 18:36:10ID:???
>>215
マジか・・・。
素直にメールサーバ立てるかあ。
0217nobodyさん2009/05/31(日) 15:45:27ID:???
無料の Gmail の SMTP は上限500だったっけ。
Google Apps の Gmail は2,500だったような気がする。

Gmail アカウントを10コ取得、アカウントをランダムで
回してメール送信すれば OK。
02181132009/06/02(火) 12:05:26ID:???
すみません、質問させてください。

production環境でもdevelopment環境みたいに
エラーが発生した時に詳細を出したいんですがどこで設定したらいいですか?
また、Controllerのメソッドを特定のアドレスからのみ実行させたいんですが、
これってrailsの設定でできます?
(ENV['REMOTE_HOST']を取得して分岐させた方が早いですか?)
0219nobodyさん2009/06/02(火) 12:12:45ID:???
>>218 grep consider_all_requests_local config/environments/*.rb
0220nobodyさん2009/06/02(火) 18:37:29ID:???
いまどきのデプロイって何使うのがいいんでしょ。capistranoでいいのかな?
作者メンテ終了ってきいて不安…
0221nobodyさん2009/06/02(火) 21:31:58ID:???
>>220
http://www.infoq.com/jp/news/2009/03/ruby-deploy-roundup

Capistrano の後継は vlad というのかな?

もっとも自分は、デプロイは、ローカルで tar.gz つくる→転送する→サーバ側で
Passenger の touch restart.txt する
という原始的なことしかしてないけど(笑)

Capistrano は評判いいらしいが、使ったことない。
0222nobodyさん2009/06/02(火) 21:35:02ID:???
作者のメンテがなくなって困るのってどんなときかなぁ

ある程度使っている人がいるだろうから
なにかあってもなんとかなりそうじゃね?
0223nobodyさん2009/06/02(火) 21:37:41ID:???
<div style="width: 100px; border: 1px solid black;">
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
</div>

で、firefoxだとdivの枠線を突き抜けてしまう現象についてなんだが・・・。
今はrubyで<wbr/>タグを文字と文字の間にはさみこんで対処してるんだが・・・
これってみんなどうしてんの?

転送量増えるし、出来ればこの方法はとりたくないなぁ。
0224nobodyさん2009/06/02(火) 21:39:09ID:???
>>223
cssでスクロールさせる
0225nobodyさん2009/06/02(火) 21:40:31ID:???
overflow:auto;
0226nobodyさん2009/06/02(火) 22:07:35ID:???
>>224-225
どうもありがとう。
0227nobodyさん2009/06/03(水) 03:54:32ID:???
そもそもオープンソフトでサポートは期待出来ないしな。
さっくり商用ソフト使ってサポート契約しておくのが安心。
0228nobodyさん2009/06/03(水) 11:48:06ID:???
なんでいきなりそんなことを言い出すんだw
0229nobodyさん2009/06/03(水) 22:26:10ID:???
あぁ・・・save!するよsave!・・・
びぎんっ!れすきゅー!
0230nobodyさん2009/06/04(木) 19:17:08ID:???
少し、Capistranoについてお聞きいたします。

svnなどのバージョン管理ツール経由でデプロイする場合は、
リポジトリサーバーを公開しておく(デプロイ先からアクセス可にしておく)必要があるわけでしょうか?

リポジトリが公開サーバーからアクセスできない(例えばローカルネットワークやファイヤーウォール内にあるなど)
場合は、どうしたものでしょうか?

また、svn等SCM経由でデプロイする利点というのは何があるのでしょうか?
0231nobodyさん2009/06/04(木) 19:25:16ID:???
この辺でググるヨシ。
set :deploy_via, :copy
set :copy_remote_dir, "/tmp/tmp2"

0232nobodyさん2009/06/04(木) 21:27:28ID:???
どうしてネット上では左翼(左派)の方が叩かれやすいのだろう。

ルーツはネットの掲示板が普段言えないこと=反良識だったところだろうね。
で、良識と左派思想に近いものがあったのが原因かと。

多分今のネットの言論の遡った先って、大昔のあめぞうとかUG系の掲示板で話されてた
中二病的な会話だったと思う。
「うぜえ、氏ね」とか「ハッキングが問題なんじゃねえ、ちょっとつついたら入られる
くらいセキュリティもちゃんとせずにネットやるほうが悪いんだよ」とか「殴られても
やりかえすな、ヘラヘラしてろってかw」みたいな。
表によろしい発言かというとそうじゃないけど、まあちょっと良識に反発しようと
思って考えずに口にだす暴論、みたいな。
それが2chになって、2chが巨大化して一般人も流入して、セコウ工作が……となっていくうちに
「ヘイトスピーチ」「自己責任」「9条破棄」と変質していったと。

でも確かにほんとうざいな、右翼コメ。
雑談スレで何かっつーとそういうネタ持ってくる人とかもうね。
0233nobodyさん2009/06/04(木) 21:32:45ID:???
>>230
set :gateway とかいう設定も使えそうな薬缶。
0234nobodyさん2009/06/04(木) 23:27:36ID:???
マイグレーション、ちゃんと設定すると結構便利だな。
0235nobodyさん2009/06/05(金) 01:44:35ID:???
Model の validation を呼び出し元 action によって切り替える、といった事ってみんなどうやってやってる?
:if とか :unless とか上手く使えばスマートに書けるのだろうか・・・。
それとも Model 内で 呼び出し元の action 取得できるような機能ってあったりする??
0236nobodyさん2009/06/05(金) 01:51:08ID:???
>>235
どこでそんなのが必要になるのかさっぱりわからんが、
新規作成時と既存レコードの更新時で変えたいなら方法はある。
02372302009/06/05(金) 04:52:19ID:???
>>231-233
サンクスコ
ググルワードおしえていただけると非常に助かります!
0238nobodyさん2009/06/05(金) 06:58:11ID:???
>>235
なんか意味が分からない。
validate_on_create、validate_on_update、validate
をモデルに定義するだけじゃ足りないの?
02392352009/06/05(金) 08:46:49ID:???
>>236
>>238

そんなに意味がわからない程珍しいシチュエーションかなー??
DB上は一つのテーブルだから一つのModelなんだけど、カラムによって登録・更新する画面がいくつかに分かれてしまった場合とかってそれなりにあると思うんだが・・・。

ttp://blog.masuidrive.jp/index.php/2008/02/23/rails_valid_columns/#
ttp://www.fraction.jp/log/archives/2008/02/29/Rails_de_Wizard

この辺の記事にもあるけど、ウィザード形式の入力フォームとか。

「じゃあ記事の方法でいいじゃん」って事かもしれんが、上の記事の方法だと一回全部 validate が実行されるし、
下の記事は API ドキュメントにある方法だけど、明示的に Controller からどの画面かを渡してるのが微妙だな、と思って、
他になんか方法がないかなー、と。
0240nobodyさん2009/06/05(金) 09:22:02ID:???
ウィザードだったら、
bodyが2画面目で入力されるとして、

class Entry < ActiveRecord::Base
 validates_length_of :body, :if => :_body_required?

 def _body_required?
  !!self.body
 end
end

みたいに普通にやれば良いだけじゃないの?
1画面目ではvaildation走らない。
0241nobodyさん2009/06/05(金) 09:24:07ID:???
ウィザード形式の入力画面って、たとえば最初に男か女か入力したとすると、
その値によって入力する内容が変わったりするってことか?
どういうものかイメージがわかないのだが、複数の画面で登録するってことは、
1つのテーブルにまとめてること自体がおかしいというわけではないの?
0242nobodyさん2009/06/05(金) 10:23:57ID:???
インターフェイスの都合をデータに持ち込んでいる時点で好ましくないと思う。
自分なら、モデルではなく、バラのセッションデータとして属性値を持ち回って、
ウィザードの最後でモデルを作るという形にすると思う。
0243nobodyさん2009/06/05(金) 10:30:16ID:???
いや、セッションで持ち回るのは当たり前だけど
validationをどうするかって話でしょ。
ウィザードの最後でvalidationするの?
0244nobodyさん2009/06/05(金) 10:42:09ID:???
途中のページでも全部のバリデーション走らせてそのページで必要なバリデーション結果だけ見るってのはどうたい。
02452352009/06/06(土) 00:39:58ID:???
>>240-244
みんないろいろなレスありがとう。
とても参考になります。

>>240
確かにシンプルでいいんだけど、最終的に body が必須(validates_presence_of)の場合だと駄目だよね?
実際ちょっと困ったのが、後の画面では必須なのに前段階の画面には入力欄の無いパターンなんだ。

>>241
選択によって入力させる内容が変わるというよりは、入力項目が多い画面なんかで、「次のステップ」みたいに画面分割された感じ。
テーブル設計のミス、と言われればそれまでなんだけど、画面が開発後半になって分割されたりしたから、タイミング的にテーブルを分けるのは難しいんだ・・・。

>>242
確かに良くないとは思う。
ただその方法だと >>243 の指摘の通りで、入力画面が分かれてるから、最期にまとめて実行すると一部の項目が入力欄がないのにエラーメッセージが出てる状態になっちゃうんだよね・・・。

>>244
それって

ttp://blog.masuidrive.jp/index.php/2008/02/23/rails_valid_columns/#

ここの人がやってた validatoin 一旦走らせて、不要な項目のエラーを errors から取り除く、ってことかな??
確かにこの方法使うとコード自体はすっきりしそうなんだけど、毎回全部の validation が一度は実行される、ってのは微妙な気がしてる。

例えば Java の Struts なんかだと ValidatorActionForm みたいに、同じ ActionForm でも パス毎に異なる検証ルールを適用できるよね?
そういう方法が Rails にも用意されているのかと思ったんだけど・・・。
そういう事やるためのプラグインとかってあったりする?
0246nobodyさん2009/06/06(土) 01:13:48ID:???
入力ページA
↓(valid_for_B?)
入力ページB
↓(valid_for_C?)
入力ページC
↓(valid?)
確認
↓(valid?)
完了
って感じで遷移するんだよね、きっと。

controllerのprivateにでもvalid_for_XX?みたいなのを作ってしまえばどうでしょう。
遷移の都合なんだから直書きでもいいかもしれない。
def valid_for_B?(record)
record.valid?
return !(errors.on(:body) || errors.on(:title))
end

昔validate_attributesってプラグインを使ったことがある。
validateするカラムをonly/exceptで指定できる。
検索してどこのリポジトリのが使えそうかおしえてちょ。
最近はgithubでforkされまくるからどこのが良さそうか迷うわな。
02472352009/06/06(土) 02:00:03ID:???
>>246

errors.on(:body) で特定カラムにエラーがあったかどうかチェックできるのか・・・これは知らなかった!
この書き方だと確かにシンプル且つ画面との結合がControllerだけに押さえられそうだね。
valid? 呼んじゃってるから validation が一旦全部実行されちゃう、ってのを無視できる箇所ならこれで良さそう。

validate_attributes ってプラグインがあるんだね。
検索してみたら日本の人が作ったのがあるみたい。

ttp://blog.imishin.com/projects/ruby/validattributes/#

ttp://github.com/kusakari/valid_attributes/tree/master

今年5月くらいにも更新入ってるようなので、メンテはされてそう。
サイトを見る限りなかなか良さそうなので、時間見て触ってみるよ!!
0248nobodyさん2009/06/06(土) 02:42:03ID:???
>>247
NetBeans 6.5でRailsアプリケーションのテスト駆動開発を:企業IT部門の変革を支援するエンタープライズ実践情報サイト EnterpriseZine
http://enterprisezine.jp/article/detail/910?p=3
NetBeans 6.5でRailsアプリケーションのテスト駆動開発を:企業IT部門の変革を支援するエンタープライズ実践情報サイト EnterpriseZine
http://enterprisezine.jp/article/detail/910?p=4

Productクラスにフィールドの値を検証するコードを追加しています。
 Productクラスにインスタンスメソッドvalidateメソッドを実装すると、saveメソッドの直前に実行されます。validateメソッドの中で、
不正な値を見つけ出したら、errorsオブジェクトのaddメソッドを使って、エラーを登録します。このメソッドは第1引数にフィールドの名前、第2引数にエラーメッセージを取ります。



1行目と2行目は、test_should_create_productとほぼ同じですので、3行目から見ていきましょう。
assert p.errors.invalid?(:price)
 priceフィールドでエラーが生じていることを確認しています。これは一種のイディオムとして覚えてください。


0249nobodyさん2009/06/06(土) 05:57:25ID:???
Capistranoの質問させてください。

cap deploy:setupが無事に終わり、cap deploy:cold しようとするのですが、
リポジトリからチェックアウト時にこけてしまいます。
config/deploy.rbは
set :repository, "svn+ssh://my_server/my_program/trunk"
 set :deploy_to, "/home/www/#{application}"
 set :deploy_via, :copy

みたいにしてあるのですが、
ローカルでの実行結果を見ると、

 svn checkout -q -r13 "svn+ssh:\\my_server\my_program\trunk" c:\cygwin\tmp
になってて、権限がない、とかでエラーになってました。
試しに
 svn checkout -q -r13 "svn+ssh://my_server/my_program/trunk" c:\cygwin\tmp
とすると問題なく実行されました。
svnに渡されるパス区切りが何故かバックスラッシュになっているみたいです。
(すいません、細かいログはちょっと忘れました。後でまた書きます)

Windowsのせいなのかな…

環境
・Windows XP SP3
・cygwin + ssh + ssh_agent
・svn, バージョン 1.5.3 (r33570) plink.exeとpageantでssh鍵接続
0250nobodyさん2009/06/08(月) 08:19:40ID:???
AptenaよりもNetBeansのほうが使いやすい。
比較的日本語のせつめいもあるからね
0251nobodyさん2009/06/08(月) 10:27:16ID:???
heroku 以外に無料の Rails ホスティングありませんか
0252nobodyさん2009/06/08(月) 11:03:15ID:???
>>251
自宅サーバー
0253nobodyさん2009/06/08(月) 11:11:23ID:???
自鯖は無料じゃない
02542512009/06/08(月) 11:27:36ID:???
やっぱりないんですかね。。。
252 的なつまらん回答としては
xrea に Rails や、GAE を JRuby on Rails とかかなぁ。
0255nobodyさん2009/06/08(月) 11:29:14ID:???
rake db:migrate すると

can't activate gettext (= 1.93.0, runtime) for [], already activated gettext-2.0.4 for []

と出ます。gettext は 1.93.0 と 2.0.4 が入っています。
エラーメッセージから推察するに 1.93.0 を指定する必要がありそうな感じなのですが、
どうしたらいいでしょうか。
0256nobodyさん2009/06/08(月) 14:35:34ID:???
>>255
gettextはもう使わないようにする。
0257nobodyさん2009/06/08(月) 14:42:45ID:???
252=256
0258nobodyさん2009/06/08(月) 14:45:16ID:???
>>251
herokuって無料ベータ終わったんじゃなかったけ?
クラウド系で1つだけなら無料のところあった気がする
0259nobodyさん2009/06/08(月) 14:47:37ID:???
あったあった
Morph AppSpaceだ。

PaaS, the leader in Platform as a Service :: Morph Labs
http://mor.ph/


Java/GrailsのWebアプリを無料クラウド環境で動かす (1/3) - @IT
http://www.atmarkit.co.jp/fjava/special/appspace/appspace_1.html
02602512009/06/08(月) 14:57:16ID:???
>>258
DB 5M までなら今も無料です。
ただ、5M は小さすぎて。
ttp://heroku.com/pricing#blossom-1
>>259
ありがとうございます。
DB も MySQL/PostgreSQL が用意されていてすごいですね。
0261nobodyさん2009/06/08(月) 15:39:25ID:???
>>255
ttp://www.moongift.jp/2008/06/thetis/
を動かしてみたいんです。
02622492009/06/08(月) 15:59:55ID:???
Capistrano(ver 2.5.5)のソース読んでみています。

謎をとくべく、リポジトリのパスが何故バックスラッシュが円記号になってしまうのか、該当箇所が見つからず困ってます…。

リポジトリのパスが lib/capistrano/recipes/deploy/scm/base.rb の repositoryメソッドで
repositoryという設定から読まれていて、
cap deploy:coldによって、
lib/capistrano/recipes/deploy/strategy/base.rb の Capistrano::Deploy::Strategy.deploy! から、
lib/capistrano/recipes/deploy/scm/subversion.rb の checkout でrepositoryメソッドが呼ばれているまではわかりました。

円記号への変換ルーチンが見つからないよヽ(`Д´)ノ ウワァァン!!
02632492009/06/08(月) 16:31:58ID:???
lib/capistrano/recipes/deploy/strategy/base.rb の Capistrano::Deploy::Strategy.system で

 if RUBY_PLATFORM =~ /win32/
  cmd.gsub!('/','\\') # Replace / with \\

というようなコードがあり、置換されているようでした。

本家でも確認されたこちらの問題のようです。

#76 Invalid subversion url - Capistrano - capistrano
https://capistrano.lighthouseapp.com/projects/8716/tickets/76-invalid-subversion-url
[Capistrano] Problem with :deploy_via, :copy and windows
http://www.mail-archive.com/[email protected]/msg05626.html


パッチあたるバージョンが出るまで、
置換されないように、/ 渡す方法ってないもんでしょうか?

Ruby一般な問題な気がするので、本スレの方で聞いてみます。
0264nobodyさん2009/06/09(火) 00:32:39ID:???
attachment_fuで、storageをfile_systemにしてるんだけど、
これってファイルを更新したくなったらどうするんですか?

ユーザ1人1人に顔アイコンをuploadできるような仕組みを考えてて、
userモデルはphotoモデルをbelongs_toしてる。

photoモデルはhas_attachmentして、uploadされたデータをファイルとして保存してる。

こんな感じで保存してるんだけど
@photo = Photo.new(params[:uploaded_data])#ファイルフィールドからのポスト含む
@photo.save
User.update(ユーザID, [{:photo_id => @photo.id}]


これで新しい画像をアップロードしたときどうすればいいんだろうか・・・と悩んでいるのだけれど・・・。

User.photo.destroy if User.photo
@photo = Photo.new(params[:uploaded_data])
@photo.save
User.update(ユーザID, [{:photo_id => @photo.id}]

こうすればいけるのはわかるのだけど、

@photo = Photo.find(params[:id])
@photo.update_attributes(params[:photo])

こういう風に更新するのが正しいような気がするのですが・・・
0265nobodyさん2009/06/09(火) 16:21:04ID:???
NetBeansでrails触っているのですが、
全体像がつかめません。
どうしたら、どのファイルが必要であるかわかったり、
ファイルごとの関連性がわかるなど
全体像をつかむことが出来ますか?

0266nobodyさん2009/06/09(火) 18:01:27ID:???
>>265
I/O BOOKSの「はじめてのRuby on rails2」がおすすめ。
慣れるとまったく読むことの無い本になるけど、
非常に簡単に説明してくれるので、まずつまづくこと無くサンプルアプリが組めるはず。

学習の最初に火種にいい本だと思ってる。
他はレシピブックが個人的には神だった。
Ruby on rails Webアプリケーションスーパーサンプルは駄目だった。
0267nobodyさん2009/06/09(火) 18:40:55ID:???
> Ruby on rails Webアプリケーションスーパーサンプルは駄目だった。

今まさにこれで勉強してる訳だが(´;∀;)
0268nobodyさん2009/06/09(火) 18:45:52ID:???
駄目な本で勉強してるおまえは駄目駄目とい・・・


あ、すまん。つい
0269nobodyさん2009/06/10(水) 00:00:25ID:???
>>267
ごめん、「駄目」って言い方悪かった。
最初にその本から始めたんだけど、俺の頭が悪くて理解不能だった。
「はじめてのRuby on rails2」は、相当ハードル下げてくれてるから
(その分進みが遅くて内容が薄い)、俺でも理解できた。

> Ruby on rails Webアプリケーションスーパーサンプル
は、バージョンが1.3なのがマイナスだけど、ある程度理解した状態で読んだら
普通にいい本だったよ。
0270nobodyさん2009/06/10(水) 01:15:45ID:???
attachment_fu参考文献すくないorz

has_attachment :content_type => :image, :storage => :file_system,
validates_as_attachment

モデルにこの設定でも、exeとかdllとかでもupできてしまう・・・


has_attachment :content_type => :image,
:storage => :file_system,
:path_prefix=>"public/image/d/",
:max_size => 3000.kilobytes,
:resize_to => '130x100'
validates_as_attachment

この設定でなんでもuploadできるし、3M超えても普通にアップロードできる・・・。

:storage => :file_systemだから?。。。
自分でファイルサイズとかのvalidate作らないとだめなんでしょうか。

他にいい画像アップロードのプラグインないでしょうか。
0271nobodyさん2009/06/10(水) 06:36:31ID:???
>>270
やりたい事がアップロードできるファイルの種類の制限(画像のみ)やファイルサイズ
だけなら、簡単そうだからプラグインのソースを直接修正すればいいと思うよ。
0272nobodyさん2009/06/10(水) 10:51:34ID:???
画像アップロードといえば、paperclipがやたら人気だが
0273nobodyさん2009/06/10(水) 11:08:18ID:???
別にプラグインのソース直すことは無いと思うけど。
一回アップロードされるのはRailsのプラグインだと、
いまのところ仕方ないこと。
アップロード後にvalidationかけてはじく。

仕事で使うとどうしても確認画面入ってくるから、
そういう場合はいまだfile_column一択になってしまう。
0274nobodyさん2009/06/10(水) 11:22:05ID:???
>>273
仕事で Rails 使っている人発見!
入力→確認→登録の流れをどう実装していますか。

登録画面にも確認画面を表示しているならその方法や、
確認→登録の hidden は何か特別なこととかしてるかとか。
0275nobodyさん2009/06/10(水) 11:47:43ID:???
>>274
確認画面JavaScriptでやれとかいう人もいるけど、
ちゃんと画面つくってる。
無理にRESTにこだわる必要なし。
JavaScriptでやると、登録まできちんとしたvalidationできないし。

値はsessionで持ち回し。まぁ、他の言語でも普通な方法。
hiddenだと、確認→登録の時にもvalidationしなきゃいけないので。
02762742009/06/10(水) 12:49:12ID:???
>>275
なるほど。session ですか。便利ですものね。
ありがとうございます。
0277nobodyさん2009/06/10(水) 13:04:17ID:???
>>271
どうもです。

↓とりあえずこれでファイルの種類特定するようにしますた。
validates_inclusion_of :content_type, :in => ["image/pjpeg", "image/jpeg", "image/gif", "image/png"]
ファイルサイズもsave前に取れる(windowsだと取れません。)のでこれでいこうかとおもってる。

しかし、windowsだとアップロードファイルのsize取れなくて、わざわざlinuxでテストしないといけない・・・。
こういうの続くと、開発環境をlinuxしたいな〜って思うようになってきたんですが、
慣れればwindows並の作業効率出せるもんなんでしょうか。

今のwin環境は秀丸+grepツール+windows付属品。
0278nobodyさん2009/06/10(水) 13:34:23ID:???
確認→登録の時にも勝手にバリデーションされるじゃん?

なんか違う意味でのバリデーションなんだろうか。
0279nobodyさん2009/06/10(水) 13:53:55ID:???
確認と登録に同じバリデーションを通るような処理を書くの面倒だから、
入力→確認→登録、というテンプレートないものかな。
0280nobodyさん2009/06/10(水) 14:04:01ID:???
仕事って言っても社内業務系は基本的に必要ないだろ。
ネット系なら確認画面は必須だが。
0281nobodyさん2009/06/10(水) 14:19:46ID:???
>>278
入力→確認 のときにvalidationかけてセッションに入れる。
エラーが出たら、入力に戻す。
確認→登録 のときは、すでにvalidationが通ってるから大丈夫。
登録から入力に戻すってのは、一画面余計に通ることになるので避けたい。
0282nobodyさん2009/06/10(水) 15:32:42ID:???
同じバリデーしょんっつてもvalid?呼ぶだけでしょ?

まあ、そう単純じゃない場合も良くあるんだよねえ。

すると、テンプレにしてもプラグインにしてもすべてのケースを網羅
できそうもないわけですね。

> 登録から入力に戻すってのは、一画面余計に通ることになるので避けたい。
redirect_toするだけじゃないの?


0283nobodyさん2009/06/10(水) 15:43:46ID:???
>>282
入力→確認→登録(エラー)→入力
よりは、
入力→確認(エラー)→入力
の方が、余計な確認画面とおらなくて良いって話でしょ。

0284nobodyさん2009/06/10(水) 16:25:24ID:???
入力画面と確認画面は if で分ける感じ?こんな感じで。

<% if 入力画面 %>
<%= f.text_field :foor %>
<% else %>
<%= params[:foo] %>
<% end %>
0285nobodyさん2009/06/11(木) 00:59:09ID:???
入力画面と確認画面は、別アクション。
当然、テンプレートも別。
デザインも別で上がって来るし、別の方が楽。
0286nobodyさん2009/06/11(木) 11:11:55ID:???
別に分けると楽なんだけど、項目の変更が入ると
入力と確認に手を入れないといけないのが DRY じゃなくて何か嫌。
YAML からでも入力と確認画面を自動生成する仕組みがあるといいのだけど。
0287nobodyさん2009/06/11(木) 14:27:20ID:???
仮にYAMLで自動になってても、デザインまでは直してくれない。
結局は手動で直すしか…。
仕事でやってると、デザイナの上げてきたデザインはめるのが辛い。
0288nobodyさん2009/06/11(木) 14:43:46ID:???
テンプレートはcssセレクタで指定して内容変えたり表示非表示したいよな。
あとサーバ不要でpartialできる仕組みを各ブラウザに持たせてデザイナの
成果物をそのまま使えるようにできないものだろうか。
<include partial="./footer.html" />

それか、Rails実行環境とSVNクライアントを
ブラウザのプラグインレベルで提供。でざいなさんもerbやってもらう。
0289nobodyさん2009/06/11(木) 15:13:57ID:???
デザイナーにソースを埋め込んでもらえばいいじゃん
そんなに複雑なロジックをテンプレートに埋め込んでるの?
0290nobodyさん2009/06/11(木) 17:25:37ID:???
うちはデザイナにerb教えてみたけど、ほとんどに人が扱えなかった。
Railsだとフォーム関連のタグが全部ヘルパになってるし、
タグにclass一個付けるにも引数にしなきゃいけないので
その辺でダメだったみたい。

他にも便利な独自ヘルパ作ってる場合(ビューの一部がヘルパに行ってる)や、
Ajaxでコントローラ内にRJSを入れていて、
そこにHTMLが入って来たりすることもある。

別にテンプレートにロジックが入ってる訳じゃなくても
デザイナには難しいみたいよ。
0291nobodyさん2009/06/11(木) 18:31:40ID:???
デザイナには erb 難しいね。
あと、たとえやってくれても、
erb のタグとか消してしまっていて、
確認をしないといけないから
開発者の手間があんまり変わらないし。
02922672009/06/11(木) 19:47:21ID:???
件の本読んでたらscaffoldが完了しないわ動作確認でRutingErrorになるわで
悩んでたんだけど2.0から変わってたのね・・・情報古いわ・・・
0293nobodyさん2009/06/11(木) 20:12:53ID:???
DHHはデザイナもerbやれって言ってたようなきがする。

ところで、RESTfulな編集系actionって
http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions
によると
new/create
edit/update
destroy
だけど、

確認画面が必要となると
new_1
new_2
new_confirm
new_commit
edit_1
edit_2
edit_confirm
edit_commit
delete_confirm
delete_commit
とかしたくなりませんか?

new
new_confirm
create
がいいのかなあ。

皆様どうしてますか?
0294nobodyさん2009/06/12(金) 00:58:46ID:???
デザイナは馬鹿だしな。
DWで対応してるPHPのほうが、まだ抵抗が少ない。
いまやHTMLと画像が用意出来れば十分な時代でもないのに。
0295nobodyさん2009/06/12(金) 08:32:37ID:???
>>294
デザイナーはバカじゃないだろ…。
役割を考えろ。
0296nobodyさん2009/06/12(金) 09:02:22ID:???
このバカとか思って教えても伝わらないよ
相手が理解できないならまず自分の教え方に問題がないか振り返らないと

代入のやり方とヘルパーの機能をまとめたものを渡せばある程度なんとかなるんじゃないだろうか
あとは分岐と繰り返しだけど、繰り返しは自動生成されるやつそのままでいけるだろうし
分岐も何回かやれば、簡単なIF文は身につくような


まあ、デザイナーに教えたことないから完全に脳内シミュレーションで
実際はイライラするのかもしれないけど
0297nobodyさん2009/06/12(金) 12:39:20ID:???
Smarty分かる人でもRailsのerbは無理だったよ。
>>290 みたいにデザインすべき要素があちこちに分散していて
全体の把握がしずらいみたい。
開発側でデザインはめて、はめた後のものを少し修正ならできた。

あと開発側としても、デザイナにerb触らせて動かなくなったりするのが
怖いというのがある。

0298nobodyさん2009/06/12(金) 13:04:00ID:???
>>297
ほんとに。Smartyわかってもダメなのか。

ヘルパーって調べるのとか結構時間がかかって
面倒とか思ってるのはおれだけだろうか。

でもあると使いたくなるし、後で使ってないところを見つけると直したくなる。
いっそごそっとなくなってくれれば楽なのかもとたまに思う。
相当役に立つやつは残してほしいが。
0299nobodyさん2009/06/12(金) 16:24:44ID:???
>>295
数人でやっている零細なんだろ
0300nobodyさん2009/06/12(金) 21:47:50ID:???
>>281
セッションにいれるのはparamsかな。
cookie storeだとあまり大きいのははいらないだよね?
0301nobodyさん2009/06/13(土) 03:57:58ID:???
そもそも論理的思考が皆無。
HTMLのタグとかも理解せずにDW弄ってる奴らだし。
ちゃんとALTタグ設定してるの見た事無い。orz
■ このスレッドは過去ログ倉庫に格納されています