2016-12-13 26 views
0

TL;問題的DR版本如何將本地字符串傳遞給部分在Ruby on Rails的

是否有可能傳遞了一個字符串的部分,並有部分使用該字符串的if語句或開關盒。

我打破了Rails的一些有價值的規則,讓觀點彼此直接對話?

長的版本W /代碼段

我認爲這是肯定地說,在這個時間點我讀過每一個崗位有關於如何通過一個局部變量。完成此操作仍然存在問題。我對鐵軌非常陌生,例如1周的學習,所以我想要做的事情可能完全不正確。

無論如何,我已經設置好它,這樣當用戶點擊導航欄上的鏈接時,引導模式會以正確的形式加載它。我已經將每個獨特的形式設置爲自己的部分,以便我可以放在需要的地方,並且還將模態設置爲部分。我試圖遵循這個DRY方法,並使其在模態部分有一個if/else或switch邏輯,它只根據鏈接傳遞的內容加載正確的表單。

莫代爾部分:

<!-- Modal --> 
<div class="modal fade" id="modalTemplate" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 
    <div class="modal-dialog" role="document"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
     <h4 class="modal-title" id="myModalLabel">Modal Template</h4> 
     </div> 
     <div class="modal-body"> 
     <% if %VARIABLE% == "%PASSED-INPUT%" %> 
      <% @customer = Customer.new %> 
      <%= render "customers/new" %> 
     <% elsif %VARIABLE% == "%PASSED-INPUT%" %> 
      --> Do something else 
     <% end %> 
     </div> 
     <div class="modal-footer"> 
     <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
     </div> 
    </div> 
    </div> 
</div> 

的NavBar部分:

<%= render 'layouts/modal_template' %> 

<nav class="navbar navbar-default navbar-fixed-side"> 
    <h6 class="navbar-heading">Customer Management</h6> 
    <div class="list-group"> 
    <%= link_to "Add New Customer", '#modalTemplate', 'data-toggle' => 'modal', what_to_render: "Test", class: 'list-group-item' %> 
    <%= link_to "Manage Customers", '#', class: 'list-group-item' %> 
    </div> 
    <h6 class="navbar-section-heading">Customer Status Management</h6> 
    <div class="list-group"> 
    <%= link_to "Add New Customer Status", new_customers_status_path, class: 'list-group-item' %> 
    <%= link_to "Manage Customer Statuses", '#', class: 'list-group-item' %> 
    </div> 
</nav> 

主視圖此頁:

<div class="container-fluid"> 
    <div class="row"> 
    <div class="col-sm-3 col-lg-2"> 
     <%= render 'layouts/side-nav' %> 
    </div> 
    <div class="col-sm-9 col-lg-10"> 
     <div class="well"> 
     <%= render 'test' %> 
     <%= render 'view_customers' %> 
     </div> 
    </div> 
    </div> 
</div> 

現在, 「增加了新客戶」 的link_to是部分這給了我最大的麻煩。我嘗試了在線提供的每種不同的組合,但它似乎總是基於使用對象或數據庫中的某些東西的想法。事情是,我只是試圖加載一個基於所選按鈕的不同頁面,同時使用相同的模態部分。我已經試過

的link_to例子:

<%= link_to "Add New Customer", '#modalTemplate', 'data-toggle' => 'modal', what_to_render: "Test", class: 'list-group-item' %> 
<%= link_to "Add New Customer", '#modalTemplate', 'data-toggle' => 'modal', :locals => { what_to_render: "Test" }, class: 'list-group-item' %> 

還有更多,但我在這一點上,我已經失去了他們刪除代碼的那麼多行。一些包括使用link_to與:部分和:當地人

+0

'設置:locals'是'render',不'link_to'一個選項。 –

+0

在渲染局部時不傳遞給link_to助手。 – Dhanabal

+0

'ruby-on-rails-x'標籤是爲了表明問題是針對特定版本的rails。不要使用多個。 – max

回答

0

你混在一起有幾個完全不同的概念,你應該在嘗試完成這個任務之前直接獲得基礎知識。

要在請求之間傳遞變量,您可以使用參數。這可以是URL段,查詢字符串或請求主體(通過使用表單)的形式。由於服務器上的變量不會在請求之間持續存在,因此您無法將局部變量傳遞給link_to,我不知道您在哪裏得到了可以工作的概念。

在另一方面locals是在部分的呈現上下文指派的局部變量的一種方式。您可以使用它來傳遞任何類型的數據。

# foo/index.html.erb 
<%= render :bar, locals: { a: 1 } %> 

# foo/_bar.html.erb 
<% if a == 1 %> 

<% elsef a == 2 %> 

<% end %> 

但是要回到你的問題。有幾種不同的解決方法。

首先是包括網頁上的所有表格,然後根據什麼用戶點擊交換模式的內容。你可以通過使用普通的老的html錨鏈接來代替link_to,並創建攔截click事件的JavaScript偵聽器,而是在模式中打開鏈接目標。

的第二種方法是使用Ajax請求獲取部分的渲染的版本。然後,您將打開一個包含從ajax請求獲取的內容的部分內容。

這可以通過多種方式解決,例如使用jQuery.load或rails ujs組件並創建.js.erb模板。

+0

在你的技能水平上,我會跳過模式,並將它作爲只是簡單的舊鏈接來實現,這些舊鏈接使用窗體呈現另一個頁面。稍後,您可以添加模式作爲漸進式增強的一種形式。 – max

+0

感謝您的鏈接和信息,我可能會遵循您所說的內容,並在嘗試使它變得更加花哨之前開始工作。 –

0

至於有些人comented中, 「部分」 選項的渲染方法,而不是的link_to。

像這樣的事情可能會爲你工作:

<a href="#modalTemplate" data-toggle="modal" class="list-group-item">Add New Customer</a> 
<%= render "your/modal/partial/path" %> 

無關提示:

不惜一切代價避免在視圖中設置實例變量。在這種情況下,你應該已經在控制器:)

相關問題