【RoR】Ruby on Rails Part20©2ch.net
レス数が900を超えています。1000を超えると表示できなくなるよ。
>>817
それなw
俺、昔オレオレで作ったことあるんだが、
Viewヘルパーのようなものは作らないで、
ビューのHTMLに書いたメタ情報をパースして変換するようにしたよ
例えば、こんなRails混じりの何が生成されるのか
全く予想がつかないコードを書くぐらいなら
<%= form_for @data do |form| %>
<%= form.text_field :name %>
<%= form.submit %>
<% end %>
こんな感じでいいだろと
<form rails-form-for="@data">
<input type="text" rails-form-input=":name">
<input type='submit'>
</form>
コードは長くなるが、HTMLの知識をそのまま活かせる
HTMLをそのまま書いたものに、+αでRailsが解釈する属性を埋め込む
それを解釈して、HTMLタグを書き換える。
(うまく作れば)HTML Validで作ることも可能 Ruby 内で、JSX を使えるようにしろ!
JavaScript(JS) 内で、JSXは使えるし、
JSX内で、JSも使える
どちらの言語からも、乗り入れ可能なのが望ましい >>818
これの方が全然いいな。
なんであんなセンスないやり方放置してるんだ?互換性のためか?
新規は避けるだろあんなん ルビィスト(笑)はhtmlみたいな低級マークアップ言語には触れたくもないのだよ その驕りが衰退を招いたんだわ
WebはHTMLから離れては生きられないのよ 基礎から学ぶ Vue.js、mio、2018/5/29
Vue の本が出た bootstrap 使ってると長ったらしい同じクラスをつけた似たような記述が何回もでてきてレイアウトちょっとかえるだけであちこち書き換えないといけないから
<h2><%=label=></h2>
<p><%=contents%></p>
みたいなのをサブルーチン化してクラスかくのを1回ですませたいんだけど
ブロック複数わたせて複数回よべるようなサブルーチン化って Rails ではできないの?
def card(&block1, &block2)
とはかけないし
card.html.erbに
<h2><%= yield :head %></h2>
<p><%= yield %></p>
ってかいて
<%= render layout: ’card’ do %>
content_for :head do
…
end
…
end
だと複数回よぶと重複してくんだよね
結局ながったらしいクラス側を変数にして
@card_label_class=…
@card_content_class=…
<h2 class=“<%=@card_label_class%>”>…</h2>
<p class=“<%=card_content_class%>”>
でしのいでる…
きれいに管理する方法ってないの? ないよ
欠陥言語だし
つーか CSS でセレクタうまく使えばクラスつけなくてもスタイルは1元管理できるだろ bootstrap のクラスをあてないと
bootstrap ベースのテンプレートやテーマをあてるときに調整しなおしになる
本当は CSS セレクタで bootstrap のクラス名が指定できれば1番いいんだけどねー
CSS4 でそういうのサポートしてくれんかね SASSでどうかけばいいんですか?
SASSでできるのって結局 bootstrap のスタイルを上書きして展開するだけで
bootstrap のクラスをあてる
(あとからテーマやテンプレートをあてられる形にする)
って無理じゃない? >>883
独自classにbootstrapのスタイルを継承して内容を含めるんだよ 継承も全部は使えないけどね
mixinとか使って生成しているのもあるから >>835
継承するには import しなきゃいけないけど
そうすると bootstrap の中身って全部展開されるんだよね?
@import ‘bootstrap’
ってかかずに
.myclass { @extend [bootstrap class] }
ってできるの?
画面を動的に構成するような場合
遷移ごとに使う部品だけのCSSやJSを読み込むようにすると
CSS(SCSS)分割してかきたくなるけど
全部のファイルに bootstrap の中身が展開されちゃうよね
application.scss に全部の画面遷移の全部品のスタイルかくってこと?
それとも bootstrap の中身が重複して何回もよみこまれても気にしなくていいのかな そもそも scss で継承できるのクラスやIDとかだけで
セレクタで構造指定した中には使えなかったはず
>>829 の例だと
<div class=“accordion>
<h2></h2>
<p></p>
</div>
に対して
.accordion > h2 { @extend }
とはかけないでしょ
@media とかのなかも使えないしいうほど sass が万能ってわけじゃない
結局CSSが楽にかけるだけでCSSでできないことはsassでも無理だよ > .accordion > h2 { @extend }
> とはかけないでしょ
普通にかけるけど?
やりたいことはCSSでできることなんだから、
sassでできるよ bootstrapはCSSなんだから、
bootstrapでできること = CSSでできること
CSSでできること = sassでできる あれ? かけるの?
前にたようなことやろうとしたら子孫系のセレクタには extend 使えないって記事複数みかけたけど 試しにかいてみたけど
select, input {
@extend form-control;
}
ってかいてもホバーエフェクトがでない
なんで? select, input {
@extend .form-control;
}
こうだろ 普通にできるな
https://jsfiddle.net/g803kutm/
--------
<div class="accordion">
<h2>h2</h2>
<p>p</p>
</div>
--------
.foo {
color: red;
}
.accordion > h2 {
@extend .foo;
} 確かに子セレクタで @extend できないってブログいっぱいでてくるね
最近のバージョンでできるようになったとか? >>843
やっぱりだめ
form-control のホバーエフェクトがでない
:hover も明示的に継承しないとだめなのかな
それとも form-control っていうクラスがついてることで JS がなんかしてるのかな SASS のextend は様々な制限があるから、
mixin を使えば? Web制作者のためのSassの教科書 改訂2版、2017
SASS のimport とか、extend は難しいから、この本を読んでいないと無理。
永遠にハマる!w
extend は、制限が多いから、mixin を使った方がよい。
import は、パーシャルとか知っていないと出来ない
bootstrap のような巨大フレームワークは、初心者はやめた方がよい。
もっと小さいやつを使うか、フルスクラッチで練習した方がよい mixin は bootstrap 側が定義してくれてないとダメじゃないの いや、、そんなに難しいか?
なんの問題もなくbootstrap上書きして使ってるけど 上書きっていうのは、上書き用のscssファイルを用意してclassや変数とか上書きしてるって意味 話がかみあってない気がするけど
よくあるのは bootstrap の基本デザインを使いつつ
自分のスタイルを追加、上書きして微調整だけど
>>833がやりたいのは自分では一切スタイルをかかずに
デフォルトのbootstrapや(テーマ、テンプレート)にデザイン任せる
つまりHTMLにbootstrapのクラスをかかずに
bootstrapに用意されてるスタイルのみをあてたいってことでしょ いつまで、できないとか結論出てないような感じで終わらねーんだよ?
scss知ってりゃ、やらなくても最初っからできるとわかっていることをいつまでグチグチ。
scssのビルドが入るからオンラインでデモ作れなくて面倒なんだよ
俺がやってやるから感謝しろボケども
[index.html]
<!DOCTYPE html>
<head><link rel="stylesheet" type="text/css" href="style.css"></head>
<body>
<div>
<button type="button">Primary</button>
</div>
<button type="button">normal</button>
</body>
[style.scss]
@import "bootstrap.min";
div button {
@extend .btn;
@extend .btn-primary;
}
1. 以上の2つのファイルを同じディレクトリに作成する
2. https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css からダウンロードして
bootstrap.min.cssというファイルで同ディレクトリに保存する
3. sassc をインストールしてコンパイルする
sassc style.scss style.css
4. ブラウザでindex.htmlを開く
そうすりゃ、divの下のbuttonにだけ、クラスも指定してないのに、スタイルが適用されるだろ
ちゃんと今俺が手元で実験して、そうなるのを確認したからな。
scssのレベルではできると証明した。Railsとの連携は別問題だ。それは自分でやれな >>846のform-controlも問題なく動いているが?
ホバーエフェクト? 周りの青いやつか?本家のサンプルもホバーエフェクトなんて無い
https://getbootstrap.com/docs/4.1/components/forms/ わー ありがとうございます
やさしい
でもなんかあたってるテーマがホバーエフェクトかけてるっぽいんですよね
input form にホバーすると枠がちょっとだけ濃くなる
最低限 form-control はかかないとだめっぽい おー そうなんですか
ありがと
ここで聞くと勉強する手間省けるから楽ちんですね つーか Rails で bootstrap を使うって simple_form みたいなヘルパー使うってことじゃないの?
いちいち view で bootstrap の HTML かくとか Rails 使ってる意味ねーじゃん >>860
とりあえずCSSとは何かを調べてから
出直してきてくださいねー scss 使うと部品わけられない糞じゃん
java の import みたいに名前空間かりるだけでコンパイルするときにリンク作るだけならともかく
CSSのimportってそこに import ファイルの中身吐き出すだけだからな
bnavbar.css
sidebar.css
mail_form.css
lp.css
みたいにわけて全部に @ bootstrap かくとか馬鹿すぎだろ SASS のimport は、パーシャルとか知っていないと出来ない
CSS としてimportするのか、SASSとしてimportするのか。
SASSとしてimportした場合、その中で、CSSをimportしていたら、どうなるのかとか
SASS のimport は、色々あるから難しい パーシャルって
_a.scss に @import bootstrap
_b.scss に @import bootstrap
ってかいて
default.css に
@import a
@import b
ってかいた場合どうなるの?
これで重複出力がないなら全部解決するんだけど >>862
> scss 使うと部品わけられない糞じゃん
何が言いたいのかわからん。
用語は適切に使ってくれ
部品分けるというのは、プログラム言語で言うと
クラスなどの単位で個別のファイルに分けること
分けて管理し、importやincludeで参照し、
ビルドで結合して一つのファイルを作る
scssでも個別のファイルに分けられるだろ?
そしてビルドで結合するだろ?
まずこれのどこが悪いのかを言ってくれ。 >>863
> SASS のimport は、パーシャルとか知っていないと出来ない
そのSASSっていうのは、sass文法の意味か?
ならscssを使え。
すべてのcssは適切なscssになっている。
それを知っていれば、以下のような疑問は起こりえないはずなんだが?
> CSS としてimportするのか、SASSとしてimportするのか。
> SASSとしてimportした場合、その中で、CSSをimportしていたら、どうなるのかとか
SASS(scss)のimportは、なにをimportしたとしてもscssとしてimportする
たとえ拡張子がcssであっても、中身がcssであっても、scssとしてimportする
それで問題は起きない。
なぜならcssで書いてあったとしても、それは正しいscssだからだ
> SASS のimport は、色々あるから難しい
お前が勉強不足でわかってないだけ >>864
> default.css に
default.scss な
> @import a
> @import b
> ってかいた場合どうなるの?
default.scss に
@import bootstrap
@import a
@import b
って書いて
_a.scss と _b.scss には @import bootstrap を書かなければいい
検証するまでもなく、解決済みだってわかるよな?w
っていうか本当にプログラマか?
検証もせずに重複読み込みで問題が発生するかもと想像できるぐらいなら、
(C/C++で有名な)インクルードガードで対応できることぐらいすぐに思いつくだろ >>867
import bootstrap ってかかないと
bootstrap のクラス名を extend できなくない? クラス名をextend
クラスをextend?
クラス名をcomplement? > default.scss に
> @import bootstrap
> @import a
> @import b
> って書いて
書いてあるが?
ってか試せよ。俺は試してないけどなー(笑)
次はなんてエラーが出てくる書けな。
書かないと何も答えない すまんけど、bootstrap使ってなおかつ独自にカスタマイズすることに何の苦労があるのかわからん
そもそもデザインごときにbootstrap使うまでもないとは思うけど、まあそれは置いといたとしても アンダースコアから始まるパーシャルファイル(scss)を読み込んでも、
CSS ファイルを生成しないって、本に書いてある
@import _a
@import _b
パーシャルファイルのアンダースコアは、省略しない方がわかりやすい
誰か試して、結果を教えてくれ じゃあbootstrap.scssに_つけておけば全部解決するのか >>872
だから自分でやれ。
scssとcssは区別する必要がない 結局 >>829 は Rails では不可能なの?
CSSはsass使えばいいとしても
role=とかdata-target=とかaria-control=とか毎回かくの大変だからサブルーチン化はしたいんだけど > role=とかdata-target=とかaria-control=とか毎回かくの大変だからサブルーチン化はしたいんだけど
今度はHTMLの話か。HTMLは下手に共通化しないことをおすすめする >>876
>ブロック複数わたせて複数回よべるようなサブルーチン化って Rails ではできないの? Procオブジェクトかラムダ式を複数渡すのならいけるかも 引数2個受け取るどころかメソッド2階よぶことすらできないんだけど
<%
def f
content_tag :div, '123'
end
def g
content_tag :div, '456'
end
def fg
f
g
end
%>
<%= fg %>
こんな view かいたら 456 しか出力されない
f ってなんで実行されないの? >>829
> 結局ながったらしいクラス側を変数にして
> @card_label_class=…
> @card_content_class=…
> <h2 class=“<%=@card_label_class%>”>…</h2>
> <p class=“<%=card_content_class%>”>
> でしのいでる…
>
> きれいに管理する方法ってないの?
だからscssで短いクラス名にするって話をしてるんだろ
<h2 class=“card-label>"…</h2>
<p class=“card-content”>…</p>
って書けばいいじゃん >>881
a = 123
a = 456
例えば、こう書いたら、456になる。
上書き じゃあどうすればいいの?
f + g だと1行になっちゃうし
<%= f %>
<%= g %>
だとインデントがずれるよね
呼び先のインデントを維持したまま複数行表示するには
パーシャルビュー使うしかないってこと? >>881
fは実行されてるけど、fgの返り値がgの実行結果になるので、結果として456しか表示されない。
<%= f %>
<%= g %>
これでもerbのインデントさえ揃ってれば、HTMLでもインデントは崩れないと思うけど?
あと毎回、2つのメソッドを続けて呼ぶのがダルいというのなら、パーシャルビュー作るのがいいんじゃないですかね。 パーシャル _test.html.erb の中で x, y って変数使うとして
render 'test', collection: [{x:1, y:2}, {x:3, y:4}]
ってわたしても x も y も undefined でおこられる
collection で引数わたしたいときどういうデータ構造でわたせばいいの? 一度マイグレーションスクリプトでAddColumnToUsersとか作ったら、
以後Usersにカラムを追加するときはこれを編集すれば良い?
それとももう一度AddColumnToUsersをgenerateしてどんどん新しく作っていくの?
どっちが普通? 既存のファイルを変更しても良いケースは
・ステージング環境や本番環境でまだそのマイグレーションを実行していない場合
・アプリのリリース前でいくらでもDBを初期化できる場合。ファイルが多くなってきたらむしろ積極的にテーブルごとにまとめたほうがいい
かな。
すでに他の環境でそのマイグレーションが実行された場合は新しく追加したほうがいい。マイグレーションをロールバックしたり再実行する必要が出てくる まず基本的に既存のマイグレーションを編集してカラム変更するという発想は捨ててくれ
多人数開発で既にコミットされたマイグレーションを上書きコミットするのは地雷行為なので絶対にしてはいけない
Railsは実行された一番最近のマイグレーションを記録してるので上書きされた過去のマイグレーションは他人の環境で実行されない
リリース前にまとめるなど特定のタイミングで意思疎通された場合以外は基本的にダメ それはマイグレーションを他の人に公開した場合だけどな
ローカルでやる分には書き換えてOK >>888-890
ありがとう
マイグレーション完全に理解した いまいちマイグレーションの存在意味がわからない
SQLなんて生で叩けばいいじゃん
列追加するのも生SQLでいけるし、すでにデータがあっても可能
気持ち悪いなら新たなテーブル作ってそっちにデータ移動して元テーブルは削除して新テーブルを元テーブルの名前に戻すだけ >>892
開発はチームでやることがほとんどなのでね
ぼっち開発なら生SQLでもいいのかもしれないけど >>892
個人個人でローカルにデータベースサーバー入れて開発してるってことを知らないんだろうな
というか、そんな高度なことができるのか?って思ってるはず。
データベースサーバーを使うのは難しいから専門家が設定してそれを
みんなで共用するのが常識だって思ってるんだろう いまいちSQLの存在意味がわからない
DBなんて使わずファイル一個置いておけば良いじゃん いまいちRailsの存在意味がわからない
MVCなんて使わず全部のアドレスにhtmlファイル置いておけば良いじゃん いまいち俺の存在意味がわからない
プログラミング言語なんて使わずAI一個置いておけば良いじゃん Rails で view かくときやっぱ全部ヘルパーでかくの?
<%= content_tag ... %>
それとも HTML 主体で要所に値いれるだけ?
<a href="<%= ...path %>...</a> >>898
構造的な部分はHTMLで書くかな
一行部分はヘルパー使うかな。<a... とかは link_to 使うね どっちかに統一するのかと思ったけど
混ぜて描くのが普通なんですね
ありがとうございました >897
あと10年もすれば実現するんじゃね。よかったな。 蔵も下請けも仕様書書けないのにどうやってAIが理解するんだよ? だから、客や AI と I/F する(できる能のある)やつだけが残るんだろ。ほんとにもうすぐだよ。 Rails で新し目の JS の記述したら develop staging は何ともなかったのに
production だけプレコンパイルでエラーはいたんだけど…
Rails で JS 使うといまだに class とか使えないの? >>904
エラーの内容をはってくれないと俺たちはエスパーじゃないんだし 調べたらすぐでてきたわ
uglifierがES6構文に対応してないのな
解決策もすぐでてくるけどproduction.rb 書き換えるんじゃダメなんか
まあ確かにこれぐらいデフォで対応しとけとは思うが Rails はじめてつかうんだけど
view と route (URL) って自分でかくものじゃなくて
モデルとコントローラーだけを自分でかけば
コマンドで勝手にできるものなの? 同じく初心者なんですけどviewのエラーがぜんぜん解読できない
他の言語だったら少なくともエラーメッセージで何がおこってるかぐらいはわかるのに…
慣れればわかるようになるのでしょうか Railsは選ばれたものにしか扱えない神のツールだからな そのエラーメッセージで検索すれば?
すべての行に、tap, p 文を付けて、インスタンスを確認するとか
本当に正しい、HTML を作っているのか?
ERB 変換後のHTMLを、ツールに通して、正しい形式かどうか、チェックするとか たしかにRails、というかrubyのエラーはかなり不親切 「Ruby は国内でしか使われていない」
デマ流してるのは Matz 本人だと思った Railsの既存システムを少しさわったことがある程度で
新規にRailsで作ることになってRails g をはじめて使うんですけど
何をどこまで手動でかいてどこまでが自動生成するのが普通なんですか
モデルのバリデーション
マイグレーションのデータ型
viewのフォーム要素
って自動で生成してくれたりするんでしょうか
boolean だったら checkbox
Datetime だったら timepicker
みたいな レス数が900を超えています。1000を超えると表示できなくなるよ。