Ruby 初心者スレッド Part 66

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん (ワッチョイ 2a2c-RM0q)
垢版 |
2020/01/04(土) 01:15:34.30ID:X7t3Qsuc0
プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ

質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 65
https://mevius.5ch.net/test/read.cgi/tech/1545421414/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/

Ruby コミュニティ公式
https://www.ruby-lang.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
866デフォルトの名無しさん (ワッチョイ ed5f-D0pj)
垢版 |
2020/11/12(木) 23:44:28.91ID:9JGUhgPP0
versionは2.7.0です
2020/11/12(木) 23:46:31.86ID:1kfP87l60
「dumpbin Windows」で検索!
868デフォルトの名無しさん (ワッチョイ ed5f-D0pj)
垢版 |
2020/11/12(木) 23:48:50.89ID:9JGUhgPP0
そもそもDLLが見つかりません
ほんとお願いします
2020/11/13(金) 00:13:10.26ID:1m9BN6xD0
>>867
初心者には意味不明です
2020/11/13(金) 00:22:55.68ID:LLS1FCOb0
g++ は、GNU の GCC に含まれる、C++コンパイラ。
GNU で、Windows 向けのDLL を作るの?

RubyInstaller か?
MSYS2/MINGW の、RubyInstaller Development Kit(DevKit)有りか?
ridk install がどうしたこうしたとか?
よく知らないけど

https://rubyinstaller.org/downloads/

Windows 10, WSL, Linux でコンパイルする方法なら、
>>789
に書いたけど
2020/11/13(金) 00:28:08.04ID:1m9BN6xD0
c++にruby_initを組み込んでみたいです
コンパイルエラーがでます
さっぱりわかりません
2020/11/13(金) 00:34:11.29ID:1m9BN6xD0
#include <ruby.h>

int main() {
// Rubyインタプリタの初期化
ruby_init();

// スクリプトの実行
rb_eval_string("print 'Hello World!'");

// Rubyインタプリタのクリーンアップ
ruby_cleanup(0);
}
2020/11/13(金) 00:55:32.20ID:4qY0TlDt0
「初心者」のやることじゃねえ。w
2020/11/13(金) 01:16:13.61ID:LLS1FCOb0
正気?
初心者が、こんな事をする訳ないだろ

C/C++ を、数年以上やってからの話
2020/11/13(金) 01:17:12.74ID:1m9BN6xD0
そう言わずにコンパイルできる方法を教えてください
2020/11/13(金) 01:52:06.56ID:LLS1FCOb0
ffi は C や C++ ように作成された共有ライブラリを、
Ruby で扱うことができるようにするためのライブラリです

libffi を使っているので、事前にインストールが必要です。
NativeExtensions を直接扱わずに、C を操作できます

ruby ffi 入門
https://hawksnowlog.blogspot.com/2019/04/getting-started-ruby-ffi.html
2020/11/13(金) 01:57:04.06ID:1m9BN6xD0
その逆が知りたいわけで。。。
2020/11/13(金) 02:03:07.72ID:LLS1FCOb0
C/C++ から、Ruby を呼ぶ方法か

検索すれば?
2020/11/13(金) 02:06:45.73ID:1m9BN6xD0
検索したんですけど見つかりませんでした
2020/11/13(金) 03:33:11.86ID:LLS1FCOb0
Windows では、無理じゃない?

Linux で探した方が良いかも
2020/11/13(金) 03:35:06.10ID:ZgWaq86m0
Windows使ってるってだけで教祖様の号令一下で石投げられるのがRubyコミュニティだからな
Pythonにしとき
2020/11/13(金) 04:42:47.05ID:b8ug5Yf30
C/C++ から Python を呼ぶ方法なんて袋叩きに逢うのが
Python コミュニティですが、それがなにかどうかされますた???
2020/11/13(金) 04:53:52.48ID:1m9BN6xD0
難しそうなのであきらめました
2020/11/13(金) 06:40:07.62ID:LLS1FCOb0
普通は、Ruby から、C 製のNArray みたいな高速なライブラリを呼ぶ

逆に、Cから、Rubyを呼ぶ事はない。
普通に、Rubyコマンドを呼べば良いだけ

例えば、Rubyスクリプト内で、Python3 コマンドを呼ぶ

str = `python3 -c 'print( "あ" )'`

puts str #=> あ
2020/11/13(金) 07:00:14.39ID:PGsPGVPV0
まつもと:それから「Backquotes」の地上げも考えていたんですけども、Backquotesをするとシェルで実行して結果を文字列で返すってやつですね。

(参加者から「いける、いける」の声)

まつもと:なんかあの辺で「いける、いける」って言ってる人がいますけど、信じない(笑)。なので、これももうちょっと先で、もう1回くるかもしれませんが、少なくとも3.0では死なないということです。
https://logmi.jp/tech/articles/321308

バージョンによって使えてたクォートが使えなくなったりするクソ言語
2020/11/13(金) 08:51:10.39ID:LLS1FCOb0
Python 2/3 のコミュニティーの分断は、地獄だった

だからRubyは、2/3 で絶対に分断させない!
2020/11/13(金) 09:27:17.47ID:PGsPGVPV0
マイナーバージョンで細切れ分断してるからな。
その辺は抜かりない。
888デフォルトの名無しさん (ワッチョイ 159b-NSHw)
垢版 |
2020/11/13(金) 12:02:41.44ID:RWm0omqa0
>>882
>C/C++ から Python を呼ぶ方法なんて袋叩きに逢うのが Python コミュニティ
初めて聴いたけどどこ情報?
889デフォルトの名無しさん (ワッチョイ 159b-NSHw)
垢版 |
2020/11/13(金) 12:09:12.42ID:RWm0omqa0
http://funktor.org/programming/cpp/embedding-ruby
890デフォルトの名無しさん (ワッチョイ 7501-NSHw)
垢版 |
2020/11/13(金) 14:17:08.52ID:/AMzz1sP0
>>881
「私がWindowsを嫌っているのではなく、WindowsがRubyを嫌っているのだ。だからWindowsを使ってはいけない。」と教組様が言ってたけど。
891デフォルトの名無しさん (ワッチョイ 159b-NSHw)
垢版 |
2020/11/13(金) 14:22:10.08ID:RWm0omqa0
教祖も言ってるけど
windowsならrubyやめてpython使う方が楽ちん
2020/11/13(金) 14:47:22.41ID:b3aeLCbPa
エラーが出たので助けてほしいです…
ターミナルでrails db:createをするの下記のような文が出ます…

Traceback (most recent call last):
4: from bin/rails:3:in `<main>'
3: from bin/rails:3:in `load'
2: from /Users/tech-camp/projects/tweet/bin/spring:10:in `<top (required)>'
1: from /Users/tech-camp/projects/tweet/bin/spring:10:in `read'
/Users/user/projects/tweet/bin/spring:10:in `read': No such file or directory @ rb_sysopen - /Users/user/projects/tweet/Gemfile.lock (Errno::ENOENT)
2020/11/13(金) 14:49:36.90ID:b3aeLCbPa
エラーが出たので教えてほしいです…
ターミナルでrails db:createをしたらこのようになりました…


Traceback (most recent call last):
4: from bin/rails:3:in `<main>'
3: from bin/rails:3:in `load'
2: from /Users/user/projects/tweet/bin/spring:10:in `<top (required)>'
1: from /Users/user/projects/tweet/bin/spring:10:in `read'
/Users/user/projects/tweet/bin/spring:10:in `read': No such file or directory @ rb_sysopen - /Users/user/projects/tweet/Gemfile.lock (Errno::ENOENT)
2020/11/13(金) 15:16:02.12ID:9KKZC7FrM
bundle installしてないとか
2020/11/13(金) 15:45:24.78ID:b3aeLCbPa
まさにそれでした…!
ありがとうございます…!
2020/11/13(金) 17:04:48.25ID:b4HB1/RK0
>>865
$ export PKG_CONFIG_PATH="$HOME/.rbenv/versions/2.7.2/lib/pkgconfig"
$ gcc $(pkg-config --cflags --libs ruby-2.7) hello.c -o hello

上の例はWindowsじゃなくmacOSでrbenv使ってる環境だけど
Windowsでも.pcファイルあると思うからpkg-configで必要なオプション取得すれば良いと思うよ
897デフォルトの名無しさん (ワッチョイ ed5f-D0pj)
垢版 |
2020/11/17(火) 15:37:28.16ID:+8mZ0oHh0
拡張ライブラリについての質問です
一次元配列の場合はデータを取得できたんですけど、
二次元配列の場合はどうすればいいんでしょうか?
よろしくお願いします

//一次元配列の場合
num = rb_ary_entry(p_val, offset);
a = FIX2INT(num);
2020/11/17(火) 18:11:21.31ID:PuHDpULa0
VALUE, FIX2INT, RARRAY, rb_ary_entry

これは、Ruby なのか?
奇妙
2020/11/17(火) 18:42:35.55ID:PuHDpULa0
Ruby では、ary[offset] だろ。
2次元配列なら、

ary = [ [1, 2], [11, 12], [21, 22] ]

ary[0][1] = 99
p ary #=> [[1, 99], [11, 12], [21, 22]]

p ary.length #=> 3
p ary[0].length #=> 2
2020/11/17(火) 19:23:04.59ID:yKNV/xx90
>>897
配列要素オブジェクトを多段にRArray*にキャストしたらええんちゃうの?知らんけど。

https://docs.ruby-lang.org/ja/latest/function/rb_ary_entry.html
https://docs.ruby-lang.org/ja/latest/function/RARRAY.html

>>898
知らんかったら黙っとくか、ググるくらいしろ。
901デフォルトの名無しさん (ワッチョイ 4b5f-cChY)
垢版 |
2020/11/18(水) 19:49:47.73ID:XrXdqU1w0
やっと解りました。。。
どうもありがとうございました!
ary = [[0,1],[2,3],[4,5]]


num0 = rb_ary_entry(ary_val, 2);
num1 = rb_ary_entry(num0, 0);
a = FIX2INT(num1);

num0 = rb_ary_entry(ary_val, 2);
num1 = rb_ary_entry(num0, 1);
b = FIX2INT(num1);

sprintf(buf, "%d , %d", a, b);
MessageBox(NULL, buf, "", MB_OK);
902デフォルトの名無しさん (ワッチョイ 4b5f-cChY)
垢版 |
2020/11/24(火) 05:57:29.80ID:tcZG3tlz0
ocraを実行してexe化したのですが、
libssp-0.dllがないというエラーが出てフリーズしました
放っておけばそのうちocraがバージョンアップで対応してくれるんでしょうか?

プログラムは、

puts "hoge"

だけです
2020/11/24(火) 06:47:14.40ID:/T/Ll6K6r
フォルダ名に日本語混ざってるとocra使えないからそれかもね
2020/11/24(火) 06:50:52.14ID:/T/Ll6K6r
日本語Windows環境ならocraよりneri使ったほうがいいと思うよ
905デフォルトの名無しさん (ワッチョイ 4b5f-cChY)
垢版 |
2020/11/24(火) 07:16:55.53ID:tcZG3tlz0
どちらもだめでした
MinGWが64bitなのがいけないいんですかね?
neriの場合は、「アプリケーションを正しく起動できませんでした」
と出ます
日本語は使ってないですよ
2020/11/24(火) 09:00:20.18ID:gfNKbZsOa
最近同じエラー吐いてる人が多いからマルチバイト文字とかじゃなくてocraのバグじゃね
今つっかかってる場所はlibssp-0.dllの有無
libssp-0.dll入手して適切なフォルダに入れれば動くかもしれないし、それを超えてもまた次のエラーメッセージ出るかもしれない

こういう場合むしろ古いバージョンのocraやrubyを使ったほうが正常に動いたりするよ
特定のバージョンとの相性で上手く動作したらむやみにアップデートしないことな
2020/11/24(火) 09:01:18.97ID:XRJpBbZB0
ひょっとして、フォルダ名・PC のユーザー名に、日本語を使っていないか?

>neriの場合は、「アプリケーションを正しく起動できませんでした」
もっと正確なエラーメッセージを取得して、それで検索すれば?

どういう理由で起動できないのかを、知りたい
色々な理由があるから、このメッセージだけでは原因を特定できない

Linux みたいに、Windows には、OS のログとか無いのか?
2020/11/24(火) 09:46:40.72ID:gfNKbZsOa
日本語じゃないって否定してんのに直前のレスも読めねーのか
https://stackoverflow.com/questions/64368535/ruby-compile-with-ocra-error-libssp-0-dll-not-found

Maybe you don't have the libssp-0.dll file installed.
You can download it from https://www.dll-files.com/libssp-0.dll.html
then placing the file where the error says.
909デフォルトの名無しさん (ワッチョイ 4b5f-cChY)
垢版 |
2020/11/24(火) 12:56:57.47ID:tcZG3tlz0
neriのエラー
アプリケーションを正しく起動できませんでした(0xc000007b)。[OK]をクリックしてアプリケーションを閉じてください。

libssp-0.dllはMinGWでgetするdllです

バグか64bitに対応してないかのどちらかだと思います
暫く様子を見ることにしました
あと古いバージョンも試してみます
2020/11/24(火) 20:33:08.36ID:GlJ0k2Kgr
こっちは64bit windows10でneri使えてるけどなぁ
911デフォルトの名無しさん (ワッチョイ 775f-FP8+)
垢版 |
2020/11/25(水) 06:01:29.82ID:vPLi7EhQ0
2.4で動きました
しかし自作のsoファイルをソースに含めると
ocra test.rb --dll ddddd.so

実行すると
FATAL ERROR: Bad signature in executable.
2020/11/25(水) 12:15:29.69ID:BeZXjuPe0
自分でエラーを作っているから、原因は君にしか分からない

そのエラーメッセージで検索すれば?
913デフォルトの名無しさん (ワッチョイ b72c-8s6k)
垢版 |
2020/11/25(水) 12:51:53.26ID:BeZXjuPe0
文字列内にある、URL を抜き出す、URI.extract、
または、正規表現のURI.regexp は、

Ruby 2.2 から obsolete になっているけど、
それに代わるものは、何ですか?

require 'uri'

URI.extract("文字列", ['http','https'] )

p URI.regexp =~ "http://www.ruby-lang.org/"; #=> 0
914デフォルトの名無しさん (ワッチョイ 775f-FP8+)
垢版 |
2020/11/25(水) 16:47:47.83ID:vPLi7EhQ0
>>912
neriでexe化できました
ocraは相変わらずですが
ありがとうございました!
2020/11/26(木) 17:59:03.02ID:ACzSTlzfa
>>913
text ="
https://i.imgur.com/UJbFSti.jpg
http://www.ruby-lang.org/
"
text.scan(URI.regexp).map { Regexp.last_match }.each { |uy|
puts uy
}
916デフォルトの名無しさん (ワッチョイ b72c-OOND)
垢版 |
2020/11/27(金) 02:05:30.36ID:lOUpIwv20
>>915
出力
http://www.ruby-lang.org/
http://www.ruby-lang.org/

2回とも、同じものが表示されるから、ダメ!
2020/11/27(金) 07:36:58.12ID:8Z+4V8c6r
text.scan(URI.regexp){|v| puts '%s://%s' % [v.shift, v.compact.join]}
2020/11/27(金) 08:41:48.24ID:lOUpIwv20
text.scan( URI.regexp ){ |v| p v }

出力
[ "https", nil, nil, "i.imgur.com", nil, nil, "/UJbFSti.jpg", nil, nil ]
[ "http", nil, nil, "www.ruby-lang.org", nil, nil, "/", nil, nil ]

この奇妙な、nil は何?
それに、:// が飛ばされている
2020/11/27(金) 16:29:26.66ID:6fRHx8hla
てかURI.regexpもobsoluteだった
2020/11/27(金) 17:54:13.89ID:tPIe9OcJ0
https://bugs.ruby-lang.org/issues/2542
はっきりした理由は書いてないけど
RFC2396自体がobsoleteになって新しくRFC3986/3987対応のregex考えるの大変だから
URI.extract/URI.regexpはobsoleteになったように見える

なので今の仕様で問題ないなら使えばいいんじゃないかって気がする
warningを避けたいならURI::DEFAULT_PARSER.extractを直接使ってもいいけど中身は同じ
もう少しちゃんとしたのがよければtwitter-textのExtractor.extract_urls
2020/11/27(金) 21:04:45.51ID:8Z+4V8c6r
qiitaにRFC3986対応の正規表現とか出てるけどそんな大変なのかね
詳しく知らんからなんも言えないけど
2020/11/27(金) 21:32:51.26ID:OZT1ua320
多言語対応まで考えるとややこしいから、すっぱりあきらめたんやろ。
923デフォルトの名無しさん (ワッチョイ b72c-OOND)
垢版 |
2020/11/28(土) 11:23:25.42ID:FGpMIdZG0
RFC3986に準拠したURI検証用正規表現
https://qiita.com/shimataro999/items/fced9665fa970c009c1e

HTTP/HTTPS の所には、こういうのが出てくるから、これらが特殊文字なんだろう。
もっと簡単な正規表現で良い

終了点を知りたい。ある文字が出たら、そこで終わりみたいな。
URL で使われない文字

^https?:\/\/

|[!$&'()*+,;=]|:)*@)?
|[!$&'()*+,;=])*)(:\d*)?
|[!$&'()*+,;=]|:)+
|[!$&'()*+,;=]|[:@]))*)*

[-._~]
924デフォルトの名無しさん (ワッチョイ b72c-OOND)
垢版 |
2020/11/30(月) 03:48:29.64ID:r8rQ87Qr0
コンテンツをファイルに書きこみながら、同時にハッシュ値も求める場合、
Go では、io.MultiWriter で、2回読み込まずに処理できるらしいが、

Ruby にも、こういう機能がありますか?
925デフォルトの名無しさん (ワッチョイ ffbb-BCf+)
垢版 |
2020/11/30(月) 20:22:04.13ID:G81cwQG00
RailsチュートリアルをRubyの言語自体の入門書としてみた場合、一般的な入門書の何割ぐらいをカバーしてるものなのですか?
2020/11/30(月) 21:45:48.29ID:r8rQ87Qr0
Rails チュートリアルは軽く「たのしいRuby」の10倍以上はある

MVC は、構造・デザインパターンなどを学ぶのが大変

おまけに、Linux・サイト製作の基本知識とか、
データベース・ERB・HTML・CSS/SASS・JavaScript・Webpack・テストとか
2020/11/30(月) 22:12:15.34ID:ifp6ptD/0
そして、それでいて文法やメソッドなどの基礎的なところをすっとばしている可能性が。w

要するに、方向性が違うので、どっちが他方をどう含んでるかは何とも言えんやろ。
2020/11/30(月) 22:44:30.64ID:r8rQ87Qr0
入門書で文法を学んだら、Enumerable のメソッドの内容を見てから、

プログラミングのお題スレの問題を解いたり、
テキスト処理などを少しやった方が良いと思う

Rails チュートリアルは、時間が掛かるから

まあでも、ウェブサイトの構築運用の最短距離は、Linux・AWS・Rails。
バックエンド・エンジニアなら、Linux・AWS・Ruby
2020/12/01(火) 01:00:57.88ID:bLJR8T1fa
3割くらいじゃね
あと別にrubyの魔術コードを書けたり読めたりしなくても生きていける
2020/12/01(火) 21:27:16.65ID:gqqffooe0
ちょ、DateTimeがdeprecatedになってるんですが・・・
これいつから?
2020/12/01(火) 23:02:19.70ID:uBfLZ+080
さすがRuby!w
おどろきの互換性。
2020/12/01(火) 23:28:41.06ID:KOqkaYUf0
wwwwww
2020/12/02(水) 10:02:26.56ID:WhLorZrAM
2.5からだね
なお英語版ドキュメントへの記載を忘れていたためRails勢には全く認知されておらず最近になって混乱を引き起こしている模様
これがRubyクォリティ
2020/12/02(水) 10:21:56.70ID:s/Tj40p50
な?ww
マイナーバージョンアップで互換性崩れるだろ?www
2020/12/02(水) 12:09:59.52ID:X5mOhjXr0
>>933
2.5からというソースある?
9末に特にアナウンスもなく変更されてるように見えるんだけど
https://github.com/rurema/doctree/commit/0645aad1d9107fa4020269f12ca9a21ec6bd859c

deprecatedになっても削除されるものじゃないから実害はないんだけど
さすがにこれはやり方が乱暴
936デフォルトの名無しさん (ワッチョイ 732c-lBG8)
垢版 |
2020/12/02(水) 12:39:09.20ID:vDg6xkSY0
DateTime は非推奨で、代わりに、Time を使うこと。
つまり、Date, Timeを使う

DateTime < Date < Comparable

Time < Comparable
937(u_・y) ◆e6.oHu1j.o (アウアウウー Sa08-9rBX)
垢版 |
2020/12/02(水) 17:21:15.67ID:LINF+1vva
https://docs.ruby-lang.org/ja/2.4.0/class/DateTime.html
https://docs.ruby-lang.org/ja/2.5.0/class/DateTime.html
2020/12/02(水) 22:11:56.65ID:n0CYjqknr
>>934
互換性は崩れてないじゃん
2020/12/02(水) 23:36:25.61ID:26rcFOAE0
deprecatedで混乱するもんなの?
廃止じゃないでしょ?非推奨でしょ?

そりゃ書き換えないといけないが
普通deprecatedになってから書き換えるでしょ?
2020/12/02(水) 23:39:12.64ID:26rcFOAE0
Ruby開発勢ならなんでいきなりdeprecatedになってるんだ?って
なるかもしれないけど、Rails勢は所詮Ruby使ってるだけの人たちだし
2020/12/03(木) 03:48:48.84ID:1lle3h49a
その身朽ちても仕様変更の激しい言語の代名詞としてruby生き残ったりして
2020/12/03(木) 03:50:09.86ID:QOvIykSz0
言語界のテセウスの船wwww
2020/12/03(木) 04:49:29.49ID:GO6EbsS10
rails自体によるdeprecatedなんていくらでもあるしそんなに騒ぐようなものでは無い
2020/12/03(木) 09:35:07.22ID:QOvIykSz0
名実ともにrailsが本体、rubyはそのバッテリーだなwww
2020/12/03(木) 10:20:11.90ID:2qogV6iv0
>>937
ソースの https://github.com/rurema/doctree/blob/master/refm/api/src/date/DateTime では
バージョンに関係なく deprecated になってるから、まだ変更が反映されてないだけですね

require 'open-uri'
%W[ 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 ].each{|ver|
open( "https://docs.ruby-lang.org/ja/#{ver}/class/DateTime.html" ) {|f|
puts "#{ver} #{( f.read.force_encoding( Encoding::UTF_8 ).match( /\bdeprecated\b/ ) )? "true ": "false"} #{f.last_modified.localtime.strftime( '%Y/%m/%d %T %z' )}"
}
}
#=>
2.3.0 false 2018/08/19 18:16:47 +0900
2.4.0 false 2020/04/10 09:17:55 +0900
2.5.0 true 2020/10/25 09:17:38 +0900
2.6.0 true 2020/10/25 09:17:11 +0900
2.7.0 true 2020/10/25 09:16:43 +0900

>>935 仰るとおり、9月の変更が反映されているかどうかのようです
2020/12/03(木) 12:06:44.28ID:7EFKRkup0
先日のURIのやつもそうだけど、過剰でもう手におえなさそうな実装を切ろうとしてんのかな。

来るべきRuby3に向けてか?
2020/12/03(木) 12:09:49.47ID:Glofd6fS0
>>945
なるほど、2.4はサポート切れてるから2.5以降だけリファレンスを更新したんだろうね

Railsとか本番で使うシステムは特殊な用途以外はTimeかTimeWithZone使ってるから別にいいんだろうけど
ちょっとしたツールでactivesupport使うまでもないようなものはTimeじゃなくDateTime使うことが多かったから
急にdeprecatedになってて驚いた
2020/12/03(木) 18:12:31.59ID:PfGMH4zi0
deprecatedで驚くのは中級以上の証
初心者は「まぁ動いてるからヨシ!」
2020/12/03(木) 20:52:46.44ID:rS3QJvGw0
ルビー初心者なんですがうまく動かなくて悩んでいます。
ここで質問さしていただいてもいいでしょうか?
2020/12/03(木) 21:12:35.91ID:hX6RFB1N0
どうぞ
2020/12/03(木) 21:16:41.53ID:QtB29qoZr
>>949
OSとruby -vの結果とエラーログを貼ってください。
2020/12/04(金) 00:07:56.54ID:fauI+lK+0
ありがとうございます
CentOS 7.8上に Ruby2.5.8 + Rails4.2 + MySQL8.0 で立てる、ごく普通の
Webアプリを構築しています。nginxは1.16です

ログイン画面で認証(sorcery)したら次画面に自分が所属する店の売り上げを
表示する、というアプリを作っているのですが、店の売り上げはログインした
ユーザに関する店の情報だけ出せば良いので、ActiveRecordのdefault_scopeを
使って、current_userのユーザ情報を元にscopeを設定しています

おおむねこんな感じです

default_scope {
where(shop: current_user.show)
}
2020/12/04(金) 00:12:58.79ID:fauI+lK+0
current_user情報の保持はRsquestStoreを使っています

うまく動いていないのは、このRequestStoreを介したcurrent_user情報が
modelのdefault_scopeの中でうまく不具現できないときがあるのです
うまく動くときもあるだけに逆に難儀しています

たまにcurrent_userの情報が直前にログインしていた別のユーザの情報と
なっている事が合って、default_scopeが期待した動きになりません。
デバッグで確認してみると、controller上でRequestStoreからcurrent_userを
復元させる場合は必ず期待通りに現在ログイン中のユーザの情報になりますが
model内で同じ事をやると正しく復元できたり出来なかったりします

model内でRequestStoreを使用するのがそもそも間違っているのでしょうか?
954デフォルトの名無しさん (ワッチョイ 732c-XXx1)
垢版 |
2020/12/04(金) 11:46:23.71ID:sfksvFP90
Rails 4.2 は古い

今は、Rails 6 の本も数冊出てる。
最低でも、Rails 5 以上

パーフェクト Ruby on Rails、2020/7、には、
scope とは再利用するクエリに、名前を付けるものって書いてある

class Book < ApplicationRecord
scope :costly, -> { where( "price > ?", 3000 ) }
end

これで、Book.costly と書けば、
Book.where( "price > ?", 3000 )となる
2020/12/04(金) 11:58:35.47ID:sfksvFP90
同じ本に、default_scope は使うなって書いてある

そのモデルクラスのすべての操作に、暗黙的に適用されるため、

逆に適用しない場合に、
Book.unscoped.where(何々)みたいに、
一々、unscoped で取り消さないといけないから、初心者を惑わすから
2020/12/04(金) 13:08:31.79ID:tBcZspOUM
>>953
まずはcurrent_userを設定してるところに問題ないか見直したほうがいいんじゃね?
2020/12/08(火) 13:45:26.29ID:/FLfc1Yi0
anemoneが更新されていないのですが、
代替えってありますか?
2020/12/08(火) 15:24:37.53ID:L/fvSJtl0
>>957
kimurai, spidr
2020/12/08(火) 16:31:36.83ID:/FLfc1Yi0
>>958
あざっす
2020/12/10(木) 20:38:12.66ID:TEgFYOMiM
DBロールバックっていつ使うんすか?
マイグレしたあとにリクエスト処理してロールバックしたらデータ整合性崩れない?
NULL不可をNULL可能にマイグレ→NULLデータ追加→ロールバック→戻せなくて死亡
みたいな感じ?
バックアップダンプファイルからリストアじゃイカンのかな
2020/12/11(金) 02:39:12.75ID:ExAO4AKO0
>>960
トランザクションの基礎を勉強しなさい
アプリを実際に作りなさい
経験がなさすぎる
2020/12/11(金) 08:54:21.70ID:Ollsi59NM
>>961
あーそっちのロールバックじゃなくてマイグレのロールバックな
2020/12/11(金) 10:55:45.84ID:vQm1aiEb0
>>962
それは「Ruby」「初心者」スレで聞くことなのか?
2020/12/11(金) 11:49:56.62ID:s+ujdTab0
>>960
もし戻す必要が出た場合にそれまでの間に追加・更新されたデータをどうするか先に考えておく必要がある
NOT NULLに戻す場合はchange_column_nullだけで対処可能だからそんなに問題にならない
バックアップから戻したら追加・更新されたデータが消える
2020/12/11(金) 12:49:02.80ID:PpUdey1gM
>>963
初心者といったらruby
rubyといったらrails
railsといったらmigration
2020/12/11(金) 12:57:56.46ID:PpUdey1gM
>>964
ふむ
マイグレのセマンティクスをよく考えて個別にロールバックを実装していくしかないのかな
でもそれだとロールバック実装コストがかなり高く付きそうではあるな
どうせロールバックは緊急時にしか使わないわけであって
だったらロールバックは捨ててバックアップリストアでもいいんじゃないかなと
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況