プログラミング学習(三日目)ProgateでRuby On Rails レッスン3


今日学んだこと

find_byメソッドで、データベースからデータを取得

モデル名.find_by(カラム名:値)で、指定したカラムの値を持つレコードを取得できる
例えば、
>a = Post.find_by(id:3)
で、変数aにpostsテーブルのidが3のレコードを代入できる。
そしてここから、
>a.カラム名
とすれば、idが3の指定したカラム名の値を出力できる。

ルーティングのURLに:idで、任意のすべての値を適用

具体的に言うと、

routes.rb
get "/home/:id" => "home#about"

とすると、URLが「/home/a」でも、「/home/xyz」でも、「/home/1234567890」でも、
homeコントローラのaboutアクションを指定されると言う訳。
ちなみに、ルーティングはファイルの上から順に該当するURLを探すので、:idを使う場合は下の方にやらないとやばい。

paramsの使い方

そして上のURLの:idに該当する値は、コントローラ内のアクション内で取得できる。
paramsにハッシュで入っているらしく、params[:id]とやると取得できる。

入力フォームを作成し、データベースに保存する方法。

これが少し複雑で難しかった。
「form_tag」と「redirect_to」と「post」を使う

まずhtml.erbファイルに入力フォームを作るのだが、
<%= form_tag("送信先のURL") do %>
<textarea name="test"></textarea>
<input type="submit" value="送信">
<% end %>

と作る。form_tagで送信先のURLを設定しつつ、入力内容の属性をname属性とし{test:"入力した内容"}というハッシュで、指定したURLに対応するコントローラのアクションへと送られる。
ちなみに、textareaにname属性を付与しないと送信できないらしい。

そしてそのアクションへ入力内容が送られるわけだが、まずそこでここではpostsテーブルを用いているので、Postインスタンスを作成し保存する。その際にparamsを使い、任意のカラムが入力された内容になるインスタンスを作成する。
こんな感じ(postsテーブルにはcontentカラムがある)
**def create**
** @inputfile = Post.new(content:params[:test])**
** @inputfile.save**
** redirect_to("送信先のURL")**
**end**

ちなみに「redirect_to」とは、アクションに対応するビューファイルが無い時にエラーにならないために、処理?データ?をほかのアクションへ送るメソッドである。

データの並べ替え

orderメソッドを用いて、「order(カラム名:並び順)」と指定するとその指定した並び順になる。昇順が「:asc」、降順が「:desc」
@posts=Post.new.order(id: :asc)とすると、idが1から並ぶ。

結構抽象的に書いた分、早く書けたが少しわかりにくい可能性が、、、