Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

想請教一下幾個問題。 #52

Closed
afgnsu opened this issue Oct 16, 2015 · 11 comments
Closed

想請教一下幾個問題。 #52

afgnsu opened this issue Oct 16, 2015 · 11 comments
Labels

Comments

@afgnsu
Copy link

afgnsu commented Oct 16, 2015

  1. 實例變數如果放在 layouts/application.html.erb 裡,是否每個controller都要引用?
  2. 什麼情況下,只需要有model 而不需要controller 和 view?
  3. Google 的網站分析程式,應該放在哪?假設我有多個 layout,可以統一放在 app/assets/javascripts/application.js 裡面嗎? 還是只能一個一個放在 layouts/*.html.erb 裡?
    2015-10-16 09 07 31
  4. 如果我有多個controllers想共用上傳照片模組,是否就一定要使用 Polymorphic Association?
  5. 依照Rails101s的範例,一個group對多個posts,如果我不想用按 New post 去新增,而直接把 post new 表單塞在 group 的 show視圖下,實做可以成功,但是資料驗證會失敗,想請教一下該如何修改?
    2015-10-16 09 20 24
@aryung
Copy link

aryung commented Oct 16, 2015

參考意見(新手怕講錯先講~呵)

  1. 應該是倒過來說吧..instance variables 應該是寫在 controller 再看你要把這個 instance variable 放在哪...e.g. PostsController 有 @posts, @tags 等等~可以放到 posts 的 view 下( application.html.erb 是共用模版)..如果你要不同的 controller 接不同的 layout 就在 controller 下 layout 'xxxx'
    所以應該是由 controller 決定 instance variables ,而不是 view (因為是 routes→controller→model→view).而不是由底層來往上推.
  2. 假設post 有多個 tag.如果某個 model(e.g. tag) 在另一個 controller 使用 (post)..那你可以不用有 tag 的 controller, views
    3.如同1一樣,看你那些頁面要給ga記錄,就可以放那些 layout
  3. 這個請大神回答(應該是看你的資料結構長怎樣..個人猜測)
    5.你這個是 messages controller, 看不懂所謂的 post , group...所以不了解就不回答了..
    參考看看..

@adlerhsieh
Copy link
Member

  1. 實例變數如果放在 layouts/application.html.erb 裡,是否每個controller都要引用?

預設instance variable不會有指定值,會回傳nil,放在layout當中代表每個頁面都會render

  1. 什麼情況下,只需要有model 而不需要controller 和 view?

Rails Console底下只需要model不用其他東西。至於在瀏覽器當中,Rails是由router去分配給controller,所以基本上一定會先到router,這題答案就是「無」。

  1. Google 的網站分析程式,應該放在哪?假設我有多個 layout,可以統一放在 app/assets/javascripts/application.js 裡面嗎? 還是只能一個一個放在 layouts/*.html.erb 裡?

可以統一放,但我建議是用partial切開。

  1. 如果我有多個controllers想共用上傳照片模組,是否就一定要使用 Polymorphic Association?

要看你上傳照片是使用哪個gem或如何實作,例如Carrierwave是用uploader去掛載到model上,所以可以使用同一個uploader去掛載到不同model上 (儘管不符合Rails邏輯)

  1. 依照Rails101s的範例,一個group對多個posts,如果我不想用按 New post 去新增,而直接把 post new 表單塞在 group 的 show視圖下,實做可以成功,但是資料驗證會失敗,想請教一下該如何修改?

資料驗證的內容是?

@adlerhsieh
Copy link
Member

另外,建議不同類型的問題可以分開成不同issue來提問,這樣比較方便了解不同問題的人來回答喔~

@afgnsu
Copy link
Author

afgnsu commented Oct 16, 2015

To adlerhsieh:

第一題:我只是想說有沒有萬用的controller (application_controller.rb ?)

第二題:所以Model不可能沒有Controller而獨自存在囉?

第三題:可是我放在 application.js 裡,執行完 RAILS_ENV=production rake assets:precompile 後,檢視首頁原始碼,什麼都看不到 >"<

第四題:我是用Carrierwave沒錯。

第五題:就一般的資料驗證,存放在 message.rb 裡。
2015-10-16 10 23 19

不好意思啦,下次會改進 ^_^

@yorkxin
Copy link

yorkxin commented Oct 16, 2015

  1. 不懂你的問題,請說明你要做什麼。如果是一個全域值要讓所有的 controller, view, model 都使用的話,請使用 const 或 environment variable,這個情況適合 API key。如果是一個全域值只給 controller 使用的話,請放在 ApplicationController,如果是給 view 用的話,請放在 ApplicationHelper
  2. 很多情況會只有 model 沒有 controller / view。最常見的情況就是 joint table。有些廣義的情況不會有 view 像是資料是經由別的 model 產生的 associated model,這個時候你不需要特別為他們做一個單獨的 view,只要在相關的 model 裡面安插 partial view 就好了。
  3. 一般是放在 partial 裡面由 layout 引用,但是你要直接灑在 layout 裡面也沒關係,只要確定是在 </body> 前面就行了。
  4. 一個 model 一個 uploader。如果你有必須共用 uploader 的用例,請詳細說明。
  5. 請檢查 @message.errors 和 browser 送出的資料了,看是少了什麼資料。

@afgnsu
Copy link
Author

afgnsu commented Oct 16, 2015

To: chitsaou

第一題:我其實要在全域布局裡放一個 ransack 的搜尋表單,裡面有 items_controller的實體變數。但是我希望這個表單在其他的 controllers 畫面也能被看到 (也就是我沒有分太多個 layout),我是有找到解決方法,就是在每個 controller 裡都放那個 item 的實體變數,只是覺得這樣很笨,看有沒有偷懶的方法 XD
2015-10-16 15 04 52

第四題:所以可以有很多個uploader?

第五題:其實是我不知道message model 驗證錯誤時,要傳回那一個路徑 XD

@yorkxin
Copy link

yorkxin commented Oct 16, 2015

  1. 最簡單的方法應該是對把那個 form 拆成 partial 然後在 application controller 加 before action 抓 ransack 參數設成 instance variable 之後在 view 裡面丟給 partial。

  2. 可以,你愛開多少就多少,而且一個 model 也可以掛多個 uploader。

  3. 一般是 render 前一個 form,因為 redirect 回去的話 parameter 帶不過去。以你的例子應該是 item 的 show

@chinghanho
Copy link
Member

關於第 3 個問題:

我會偏好把 Google 分析碼獨立載入,放在讀取 application.js 之前。

HTML5 Boilerplate 有提到 Google 建議把 GA code 放在頁面前面越早載入越好,是為了達到追蹤目的,放在 application.js 裡面要等東西載完才能執行 GA 太慢了,尤其 application.js 體積肥大的時候。

評估自己的情境跟目的,再來決定放哪裡。

@afgnsu
Copy link
Author

afgnsu commented Oct 16, 2015

To chitsaou:

第一、四題:謝謝你的建議,我來試試看 ^_^

第二題:有範例可以參考嗎?

第五題:問題就在我成功也回 item_path(@item),驗證失敗也只能回 item_path(@item) XD

2015-10-16 15 04 52

To chinghanho:

第三題:那就直接塞在 layouts/application.html.erb 的 <%= javascript_include_tag "application" %> 上面囉?

@chinghanho
Copy link
Member

@afgnsu 我會用 inline 的方式寫耶:

_google_analytics.html.erb

<script>
  (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
    function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
  e=o.createElement(i);r=o.getElementsByTagName(i)[0];
  e.src='https://www.google-analytics.com/analytics.js';
  r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
  ga('create','UA-XXXXX-X','auto');ga('send','pageview');
</script>

而且我會把 script 放到頁面最底下,最後載入。

layouts/application.html.erb

<body>
  ...
  <%= render "google_analytics" %>
  <%= javascript_include_tag 'application' %>
</body>

@afgnsu
Copy link
Author

afgnsu commented Oct 21, 2015

感謝大家,我再試試 ^_^

@afgnsu afgnsu closed this as completed Oct 21, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants