2016-06-28 4 views
1

私はこの問題を解決できません。私はsimple_formを使用しており、モデルを使ってフォームをレンダリングする必要がありますが、問題はエスケープ・ジャバスクリプトを持たないjsファイルですteam_players_input.js.erbそれぞれのモデルをescape_javascriptに渡してフォームをレンダリングします

<div id="myModal" class="modal fade"> 
<div class="modal-dialog"> 
<div class="modal-content"> 
    <div class="modal-body"> 
    <%= simple_form_for @team do |t|%> 
     <div class="row"> 
      <ul class="team_name"> 
       <li><%=t.input :name, label: 'Nombre del Team'%></li> 
       <%=t.fields_for :checkbox do |c|%> 
        <li><%=c.input :check, as: :boolean, label: 'Crear y Agregar Usuarios'%></li> 
        <li><%= t.association :users, label: "Buscar Usuarios"%></li> 
       <%end%> 
      </ul> 
      <%= render :partial => 'teams/forms/team_players_input', :locals =>{ t: t}%> 
      <div class="modal-footer"> 
       <button class="btn" type="button" id="boton">Cancelar</button> 
       <%=t.submit "Crear Team", :class => 'btn btn-primary', id: 'create_team_boton'%> 
      </div> 
     <%end%> 
      <%=form_tag team_players_input_teams_path, remote: true, id:'team_players_input', authenticity_token: true do%> 

<%end%> 
     </div> 
    </div> 
</div> 

team_players_input controller action: 
    respond_to do |format| 
     format.js 
    end 

new.html.erb内のモデルを取得します

$("#team-players-input").replaceWith("<%= escape_javascript(render(:partial => 'teams/forms/team_players_input', :locals => {t: t))%>"); 

_team_players_input.html.erb:

<div class="add_team_user" id="team-players-input"> 
<%if [email protected]?%> 
<%= t.fields_for :user do |u|%> 
    <ul class="team" id="add_team_players_list"> 
     <div class="player"> 
      <li>Player 1</li> 
      <ul class="team_player"> 
       <li><%=u.input :name1, label: 'Nombre:'%></li> 
       <li><%=u.input :lastname1, label: 'Apellido:'%></li> 
       <li><%=u.input :rut1, label: 'Rut'%></li> 
       <li><%=u.input :nickname1, label: 'Nick:'%></li> 
      </ul> 
     </div> 
    </ul> 
<%end%> 
<%end%> 

私の問題があり、レンダリングファイルにfields_for使用する "T" モデルをキャッチしますが、私は次のエラーをスローする必要があります

ActionView::Template::Error (wrong number of arguments (0 for 1..2)): 
app/views/teams/forms/_team_players_input.html.erb:3:in `_app_views_teams_forms__team_players_input_html_erb___3125175976749038336_69999593801700' 
app/views/teams/team_players_input.js.erb:1:in `_app_views_teams_team_players_input_js_erb__1712103055993110209_69999599110300' 

レンダリングファイルにモデルを渡す方法はありますか?誰か助けてください

+0

あなたのファイル参照は、あなたのアプリケーションに名前が付けられている方法で名前を付けることができます。あなたが 'jsファイル' 'レンダリングファイル'などを見ているときに、質問を理解するのが難しいです。 – oreoluwa

+0

申し訳ありません編集済みのC: – StAx

+0

@StAx team_players_input.js.erbはどのようにトリガーされましたか?私はどのような行動方法からですか?どのようなフォームリクエスト/ボタンでも、そのアクションメソッドをトリガーしていることを伝えておくと便利です。これらのことを教えてください。私はそれに応じて回答を構成します。 –

答えて

0

team_players_input.js.erbのチームオブジェクトにアクセスするには、同じコントローラ内に対応する操作方法team_players_inputにインスタンスオブジェクト:@teamがあることを確認する必要があります。これが完了したら、を参照してteam_players_input.js.erb@teamオブジェクトにアクセスできます。このteam_player_inputアクションメソッドがjs要求を表示するように行われていることを確認してください。

また、@teamオブジェクトはそのアクションメソッドでどのように利用できるのでしょうか?基本的には、ビューレイヤーからいくつかのフォーム/ボタンなどからjsリクエストを作成します。 js/ajaxリクエストでは、関連するteam_idをパラメータとして渡す必要があります。以降、@teamオブジェクトのようなもので利用できるようにすることができるteam_idという使用上:1 @team = Team.find_by_id(params["team_id"].to_i)

EDIT: だから、あなたは(たぶん好き)このリモートjsの呼び出しでTEAM_IDを送ることができる必要があります:

<%=form_tag team_players_input_teams_path, remote: true, id:'team_players_input', team_id: @team.id, authenticity_token: true do%> 

そして対応するアクションメソッドに:

team_players_input controller action: 
    @team = Team.find_by_id(params[:team_id].to_i) # this is to give you rough idea. You need to look at exact params and identity where team_id is in params hash 
    respond_to do |format| 
    format.js 
    end 
    .. 

このくらいが完了したら、あなたはteam_players_input.js.erb@teamにアクセスすることができます:

$("#team-players-input").replaceWith("<%= escape_javascript(render(:partial => 'teams/forms/team_players_input', :locals => {t: @team))%>"); 

これはあまりにも冗長だと思います。しかし、役に立つと願っています。)

+0

それは私が前にチームを作る必要があり、単に新しいチームを作るためにsimple_formを使う必要があるという問題です – StAx

関連する問題