私はselect_tag
とonchange
を使用しています。私は、ヘルパーメソッドを呼び出し、パラメータとして選択した項目の値を渡す必要があります。erbで<% %>のjavascript変数を使用する - Ruby on Rails
これは私のヘルパーメソッドを使用して、私は何をする必要があることは、ユーザーの選択を取得することです
def find_template(temp)
"Hello #{temp}!"
end
どのように見えるかですjavascriptを開き、find_template
に渡します。私が代わりにテンプレートの文字列を渡すと、それはすなわち<% @header = find_template("option_1") %>
、正常に動作しますが、私はvar template
を使用するとき、私は次のエラーを取得:
undefined local variable or method `template' for ...
をし、これが解決
<% content_for :javascript do %>
<script>
function template() {
var e = document.getElementById("category");
var template = e.options[e.selectedIndex].text;
<% @header = find_template(template) %>
}
</script>
<% end %>
<%= select_tag(:category, options_for_select(
Blah::TYPES.map {|k, v| [v['name'], k] }),
{onChange: 'template()'}) %>
<div id="template-overview">
<table>
<tr>
<% @header.each do |column| %>
<th class="<%= cycle('even', 'odd') -%>">
<%= column %>
</th>
<% end %>
</tr>
</table>
</div>
あなたがルビーの内側にはJavaScriptを使用することはできません:あなたのdivのコントローラで
移入している部分があります。 Rubyはサーバー側です。 Javascriptはクライアント側です。そのような変数を渡すには、AJAXリクエストを行う必要があります。 http://blog.teamtreehouse.com/i-dont-speak-your-language-frontend-vs-backend – Cfreak
あなたのページが読み込まれると、RailsはHTML、JS、CSSなどを生成し、それをサーバーに送ります。 Railsコードは、ページをリロードせずにページの内容を変更しません。コンテンツを変更したい場合は、JSを使用してRails関数を呼び出さずにページのコンテンツを動的に変更する方法を見つける方がよいでしょう。 – Okomikeruko
クライアントコードの前にサーバーコードが実行されるため、変数は未定義です。 AJAXを使用します。 – PHPglue