iT邦幫忙

DAY 8
0

Rails. Really, I love study.系列 第 8

相關。

"我與妳之間有一條線,於是我倆就有了關係"

產生第二個 model
以及讓這兩個 model 有所關聯
之前已經先建了 girb 這個 model,然後新產生一個 model 為 bang,並開一個欄位 girb_id
藉由欄位 girb_id,這個 model bang 能和 model girb 有所關連

rails g model bang girb_id:integer





rake db:migrate

僅僅 bang 裡面有 girb_id 這個欄位讓他們有所關聯還不夠
並需指明他們是怎麼關係的一個關連
在這裡是一個 girb ,可以有很多的 bang
girb 裡面有很多 bang

app/models/girb.rb


class Girb < ActiveRecord::Base
  has_many :bangs, dependent: :destroy
end

bang 屬於 girb

app/models/bang.rb


class Bang < ActiveRecord::Base
  belongs_to :girb
end

到 routes.rb 加入新寫好的 on_click_bang

config/routes.rb

Rails.application.routes.draw do
  resources :girbs do
    member do
      post :like, <strong>:on_click_bang</strong>
    end
  end
end

到 controoler 寫好相對應的 code

app/contorller/girbs_controller.rb

class GirbsController < ApplicationController
  def index
    @girbs = Girb.all
  end

  def like
    @girb = Girb.find(params[:id])
    @girb.like += 1;
    @girb.save
    redirect_to(girbs_path)
  end

  def on_click_bang
    @girb = Girb.find(params[:id])
    @girb.bangs.create
    redirect_to(girbs_path)
  end

  private

  def girb_params
    params.require(:girb).permit(:name, :email, :like)
  end
end

相對應的 view

app/views/gribs/index.html.erb

<h1>Index Page of Girb</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Like</th>
<th>Bang</th>
</tr>
</thead>
<tbody>
<% @girbs.each do |girb| %>
<tr>
<td><%= girb.name %></td>
<td><%= girb.email %></td>
<td>
<%= link_to like_girb_path(girb.id), method: :post do %>
<%= girb.like %>
<% end %>
</td>
<td>
<%= link_to on_click_bang_girb_path(girb.id), method: :post do %>
<%= girb.bangs.size %>
<% end %>
</td>
</tr>
<% end %>
</tbody>
</table>

鍵入
http://localhost:3000/girbs
可以發現多了一個欄位 bang,並且可以點擊資料更新


上一篇
點擊。
下一篇
真棒。
系列文
Rails. Really, I love study.30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
逮丸逮丸
iT邦大師 1 級 ‧ 2014-10-02 08:55:15

不是很了解bang的作用是什麼?
是點擊後導引到其個別的girb,又產生一個關連到grib卻又沒有內容的bang?
其實bang,可以做成與like同樣的數字欄位來計算點擊數嗎?

建議你的標籤可再加 ruby rails ror 等字樣。
程式碼用慣用的語法縮排會比較好看些。

0
hazetodo
iT邦新手 5 級 ‧ 2014-10-21 08:52:03

恩, bang 這裡其實沒有任何作用, bang 跟 like 想要達成的效果是一樣的, 只是作法不同.

我要留言

立即登入留言