0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby on Rails6 学習メモ

Last updated at Posted at 2021-05-20

#form関連(特にform_with)
###データベース上の値をセレクトボックスで出力させる

slim
= f.collection_select :project_id, current_user.projects, :id, :name, {include_blank: "プロジェクトを選択してください"}, class: 'form-control'

このように記述する。
書き方の公式としては、

slim
= f.collection_select :保存先のカラム名, 表示したいデータベースのモデル.all, :保存したい値, :表示させる文字列, {include_blank: "プロジェクトを選択してください"}, class: 'form-control'

#link_toの使い方

<%= link_to 'アカウント設定', "/users/edit" %>

これが基本的な使い方。

###戻るボタン

<%= link_to '戻る', :back %>

###data: { confirm: "削除してもよろしいですか?" }
リンクの先に行く前にメッセージを提示してくれる

= link_to '削除', task_path(@task), method: :delete, data: { confirm: "削除してもよろしいですか?" }

こんな感じで削除リンクとかで使うと便利かも。

#deivse関連
###ログアウトのリンク

<%= link_to 'ログアウト', destroy_user_session_path, method: :delete  %>

###devise(認証機能)のviewを取得する方法

divise.rbにて

devise.rb
  config.scoped_views = false

をコメント外して、trueに変更する。そのあとに

terminal
rails g devise:views

とコマンドを打つ。

###サインしていたら〜の処理

<% if user_signed_in? %>
処理
<% end %>

このようにuser_signed_in?メソッドを使用する

###current_userについて
ログイン中の自分のアカウント情報を取得できるcurrent_userだが、userの部分は
変化する。
例えば、devise機能でモデル名をuserとしたら、current_userとなるが、
モデル名をcompanyとしたら、current_companyとなる。
idを取り出したい時はcurrent_company.idで取得することができる。

current_userはuser = User.find(current_user)と同じなので、そのままアソシエーションにも使用できる。

my_name = current_user.profile.name

# user = User.find(current_user.id)
# my_name = user.profile.name
#これと同じような動きになる

といったようにできる

#マイグレーション
###マイグレーションを完全リセットして、変更を反映させる

rake db:migrate:reset

###上のコマンドでエラーが出た時

terminal
rails db:environment:set

を打てば治る

#モデル
###ログイン中の自分の情報を取得(二通りある)
####一つ目

@user = User.find(current_user.id)

モデルのfindメソッドで引数に現在ログイン中の自分のdeviseの情報を格納する。
deviseの自分のアカウント情報はcurrent_userで取得できる。その中でもidを取得したいのであれば、
current_user.idとする。
ちなみに、コントローラーとモデルで関係ないモデルも使用することができる。

####二つ目

@user = current_user

で自分のアカウント情報が取得できる。
しかし、これはモデルを通してないから、DBのリレーションをする際には、ひとつ目の方法で行うこと。

##バリデーション
###belongs_toによる勝手に設定されるバリデーションを防ぐ

モデル
# project_id変更時のnilを許可する
  belongs_to :project, optional: true

このようにoptional: trueというオプションを追加すると値のnilを許可する。

#コントローラー
###特定のカラム(値)のみUpdateする方法(controller上で値を変更する)

controller
user = User.find(current_user.id)
user.age = 50
user.save

通常はviewでフォームを作成して、updateするが、controller上で値を変更する場合は、このような記述で変更することができる。

###アカウント削除の時に関連するデータも削除する方法
dependent => :destroyを記述することで、退会時にユーザID情報(user_idを持つもの)を持つデータを削除する。

User.rb
has_many :messages, :dependent => :destroy#退会時コメントも削除

#左上のやつを消す方法

/?pp=disableをURLの最後に追加する
一定期間の間は、一回追加するだけで消える。
また再び左のやつが現れたら上のをURLに追加してリロードする

#Railならではの省略系
###@userの正体

view
<% link_to 'リンク名', @user %>

このような書き方がある。これはいわゆる

controller
@user = User.find(2)
url_for(@user)
# => "/users/2"

このような内容となっている。
恐らく、usersコントローラーでuser.idを指定していると考える。

#routes.rb
###resourcesの考え方

index 
new
create
edit #対象のデータ
update #対象のデータ
show #対象のデータ
destroy #対象のデータ

対象のデータが必要なアクションにはidが必要となる。

###リソースとは
データベースのテーブルに保存される、レコード1行分の情報のこと。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?