TECH EXPERT 19日目

TECH::EXPERT

個人アプリ作成が楽しい作業。
反面、学ぶ内容が増え続けるので大変です。
今日はつくばへ戻るので早めに失敬。
8時に渋谷を出ても家に着くのは10時半過ぎ。遠いわ。

rails

form_for

クラス等の属性を付与する場合、インスタンスに続けて html: {class: ‘col s12’} のように入れる。

<%= form_for(resource, as: resource_name, url: session_path(resource_name), html: {class: 'col s12'}) do |f| %>
html: {class: 'col s12', id: 'hoge'}

ここの要素に属性をつける場合はこう。

<%= f.submit "Log in", class: "hogehoge" %>

submit等のボタンはinput要素なのでインライン要素。
つまり中央寄せする場合は親要素にtext-align: center;を設定する。

jqueryを使う方法

gemファイルに以下を記入してbundle install

gem 'jquery-rails'

spp/asset/javascript/application.jsに以下を追記

//= require jquery
//= require jquery_ujs

renderメソッド

<% render partial: "hoge", collection: @hogehoges %>
↑↓は同義。collection記法であれば大半を省略できる。
<% render @hogehoges %>

collection記法の省略は、インスタンス名sと_インスタンス.html.erbの規則であれば省略可能で、部分テンプレート内ではインスタンス名(単数形)が用いられる。
この規則は、@hogehogesの文字列由来ではなく、@hogehogesのモデルに由来する。
このため、下記のような記載では、参照される部分テンプレートや部分テンプレート内のインスタンス変数名はモデル由来のものが利用される。
これは規約なのでどうしようもない。

def index
  @hogehoges = Post.all.page(params[:page]).per(5)
end

posts/index.html.erb
<%= render @hogehoges %>

posts/_post.html.erb
<%= post.text %>

部分テンプレート?

投稿時と編集時で同じフォームを使いまわそうとした際に、下記のようにしても動く。
変数を渡していないのにフォーム上にeditしたい値が埋まった状態で表示されるのはなぜ???

edit.html.erb
<%= render partial: "form"%>

コントローラ
def edit
  @post = Post.find(params[:id])
end

_form.html.erb

<%= form_for(@post, html:{class: "col s12"}) do |f| %>
    <div class="input-field col s12">
      <%= f.text_area :text, autocomplete: "text" %>
      <%= f.label :text , for: "textarea1"%>
    </div>
<% end %>
リソースの編集画面を作って、編集処理を実装する | Ruby on Rails 始めました
Ruby on Railsで電話帳アプリを作っています。 前回までで、電話帳リストの一覧画面と新規登録画面を作りました。...

データの型の変更

rails g migration change_datatype_変更したいカラム名_テーブル名

この表記をよく見るが、結局できるのは空のmigrationファイル。

class ChangeDatatypeUserIdPosts < ActiveRecord::Migration[5.2]
  def change
    change_column :posts, :user_id, :integer
  end
end

change_colomnでテーブル名、カラム名、型を指定することで変更する。
migrationファイルができたらrake db:migrateして終了

chat_space

railsのバージョンを指定してプロジェクトを作成

rails _5.0.7.2_ new project名 -d mysql

インストールされているGemのバージョンが競合するとエラーが出る。
一旦アンイストールして再インストールする。

gem uninstall gem名
gem install gem名 -v 1.1.1

slackとgithubの連携

slackのチャンネルで以下を入力して連携を許可

/invite @GitHub 

連携項目を追加する
デフォルトでは以下

issues(イシュー) 
pulls(プル)
statuses(ステータス)
commits(コミット)
deployments(デプロイ)
public(パブリック)

追加されない項目は以下なので必要に応じて追加する

reviews(レビュー)
comments(コメント)
branches(ブランチ)
/github subscribe githubのユーザー名/リポジトリ名 追加したい機能

rails gで不要なファイル群を作成しないように設定変更

config/application.rbに以下を記述

module ChatSpace
  class Application < Rails::Application
    config.generators do |g|
      g.stylesheets false
      g.javascripts false
      g.helper false
      g.test_framework false
    end
  end
end

コメント