2015-05-22 70 views
0

在Rails 4中,如何調整以下控制器,視圖和局部視圖,以便當我單擊"Update Time"提交按鈕時,id爲'search_results'的html div會更新爲由_results.html.erb生成的內容部分?Rails 4 form_tag部分更新元素

我在一段時間內沒有使用過Rails,我似乎記得它在Rails 1中做起來非常簡單。我在Rails 4中找到的文檔似乎涉及JQuery,我不熟悉並且不明白將其綁定到這種形式。

我有一個讀通過這個:http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html

但還是不完全明白是怎麼回事。

RuleSearchController.rb

class RuleSearchController < ApplicationController 
    def index 

    end 

    def results 

    end 
end 

index.html.erb

<%= form_tag('/rule_search_results', :id => 'search_form') do %> 
    <%= submit_tag "Update Time" %> 
<% end %> 

<div id='search_results'> 
    <%= render partial: "results" %> 
</div> 

_results.html.erb

<%= Time.new %> 

更新 目前的答案是做一些奇怪的事情。它的工作原理,當我有東西在_results.html.erb這是一個簡單的襯裏,如:

<%= Time.new %> 

但是,如果我這樣做,因爲這簡單的東西:

<%= Time.new %> 
<hr /> 

雖然沒有錯誤上來控制檯上,沒有任何反應,搜索結果div不會更新。

進一步更新 我可以遍歷AR對象的數組,並有自己的名字印在所提供的div我這樣做是在一個像像下面的search_results,它是文件中唯一的行:

<% for rule in rules do %><%= rule.name %><% end %> 

以下但不工作

<% for rule in rules do %> 
    <%= rule.name %> 
<% end %> 

回答

2

這應該工作:

index.html.erb

<%= form_tag('/rule_search_results', :id => 'search_form', remote: true) do %> 
    <%= submit_tag "Update Time" %> 
<% end %> 

然後創建一個在同一目錄下名爲 'results.js.erb' 作爲您的_results.html.erb文件,此文件:

$('#search_results').html('<%= render partial: "results" %>'); 

這是遠程控制:true告訴控制器,而不是它的javascript請求,所以控制器知道要用方法名跟着.js.erb來查找文件,並自動運行JS代碼。

更新:在回答與多行HTML的問題,你可以再渲染前添加一個「J」,而這將難逃輸出:

$('#search_results').html('<%= j render partial: "results" %>'); 
+1

謝謝,這偉大工程,到底是什麼我需要。我真的需要進入JS的東西,並正確地學習它,但我現在不需要太多的東西了。在你的回覆中有一個缺失的括號,我編輯它以備日後任何人查詢此問題。 – Axiombadger

+0

當results.html.erb中的代碼不是簡單的一行,一個html標記文件時,此答案正在做一些奇怪的事情。有關詳細信息,請參閱更新問題 – Axiombadger

+0

我已經說過這是正確的,因爲它確實如我原先所要做的那樣,這可能需要另外提出一個問題。 – Axiombadger