ビュー
<コントローラに、ビューに表示したい情報を定義する>
コントローラーのアクション内に定義したインスタンス変数(@つきの名前の変数)は、そのアクションが表示するビュー内で利用することができます。
tweets_controller.rbコントローラーファイル(subtext)
def indexで@で入力する(表示させる)文字を入れる。
その場合このインスタンス@変数は、indexアクションに対応したビューであるapp/views/tweets/index.html.erbの中で利用できます。
Railsの見た目用のファイルであるerbファイルの中でRubyのコードを利用する場合、<%= %>という記述で囲います。
<%= @入力する文字 %>
<%= %>の中のrubyコードは、ビューをレスポンスとして返すまでに実行されて、最終的にはHTMLになります。
ターミナルでディレクトリ(pictweet)に移動し、rails sを起動するとテストサーバーページが上がる。
<tweetsテーブルのレコードの情報をビューに表示>
『controller.rb』で
def index
@tweet = Tweet.find(3) ※こうすると特定の表示
end
次に
『index.html.erb』で
<div class="contents row" >
<p><%= @tweet.text %></p> ※こうするとコントローラーの@部分が表示される
</div>
全てのつぶやきを表示する
コントローラーで Tweet.allにする。
index.html.erbファイルで
<div class="contents row" >
<% @tweets.each do |tweet| %> 追加
<p><%= tweet.text %></p>
<% end %> 追加
</div>
このようにすると、eachメソッドのdoとendで囲まれた<%= tweet.text %>の部分を、@tweetsのレコードの数だけ繰り返し表示するようになります。
見た目の変更はviewファイル内。
fontsフォルダを追加してttfファイルをその中に。そしてCSSでファイル名を入れて指定。
application.css内に記述されている「require_tree .」は同じ階層にあるcssファイルをすべて読み込む。
!ツイートの投稿画面を作る!
<ルーティングの設定>
どんなアクションをしたらどのファイルがどう動くかを設定する。
『routes.rb』ファイルで Rails do 〜 end内に
get 'tweets/new' => 'tweets#new' を追加。
前半部分がパス、後半部分がコントローラーとアクションを示しています。「localhost:3000/tweets/new」にアクセスした時にtweetsコントローラーのnewアクションが動くことを示しています。
<次にコントローラーの設定>
『tweets_controller.rb』で
def new end を追加。
<次にビューファイルの作成>
viewsフォルダの中のtweetフォルダに『new.html.erb』ファイルを新規作成。
〜実際の投稿フォームを作る〜(以下フォームタグ)
<div class="contents row">
<%= form_tag('/tweets', method: :post) do %>
<h3>
投稿する
</h3>
<input placeholder="Nickname" type="text" name="name">
<input placeholder="Image Url" type="text" name="image">
<textarea cols="30" name="text" placeholder="text" rows="10"></textarea>
<input type="submit" value="SENT">
<% end %>
</div>
コントローラーにアクションを追加
paramsメソッド
ビューでフォームに入力された情報は、コントローラーにキーと一緒にパラメーターとして送られます。このパラメーターはparamsというメソッドを使うことで取得することが出来ます。paramsメソッドを使用する際にはparams[:キー名]という形で使用することが出来ます。
ストロングパラメーター
ストロングパラメーターとは、指定したキーを持つパラメーターのみを受け取るようにするものです。もし仮に悪意のあるユーザーが、不正な情報を送信しようとしたときに、ストロングパラメーターを設定しておくと、不正な情報を受け取らずにすみます。
privateメソッド
classの内部でprivateとソースコードに書くと、それ以降に定義したメソッドはclassの外部から呼び出せなくなります。
このようにするメリットは以下の2つです。
1.外部から呼ばれたら困るメソッドを守ることができる
メソッドの中には、外部から呼び出されてしまうとエラーを起こすメソッドも存在し得ます。そんな事態を事前に防ぐことができます。
2.可読性
外部から呼び出されるメソッドを探すときに、private以下の部分は目を通さなくて良くなります。
この記事が気に入ったらサポートをしてみませんか?