Coder Social home page Coder Social logo

Comments (11)

aryung avatar aryung commented on May 20, 2024

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

  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...所以不了解就不回答了..
    參考看看..

from ama.

adlerhsieh avatar adlerhsieh commented on May 20, 2024
  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視圖下,實做可以成功,但是資料驗證會失敗,想請教一下該如何修改?

資料驗證的內容是?

from ama.

adlerhsieh avatar adlerhsieh commented on May 20, 2024

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

from ama.

afgnsu avatar afgnsu commented on May 20, 2024

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

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

from ama.

yorkxin avatar yorkxin commented on May 20, 2024
  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 送出的資料了,看是少了什麼資料。

from ama.

afgnsu avatar afgnsu commented on May 20, 2024

To: chitsaou

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

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

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

from ama.

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

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

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

from ama.

chinghanho avatar chinghanho commented on May 20, 2024

關於第 3 個問題:

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

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

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

from ama.

afgnsu avatar afgnsu commented on May 20, 2024

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" %> 上面囉?

from ama.

chinghanho avatar chinghanho commented on May 20, 2024

@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>

from ama.

afgnsu avatar afgnsu commented on May 20, 2024

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

from ama.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.