2017-08-15 9 views
1

私は、コントローラ内visitable_idを取得し提出したとき、私は2番目のパラメータcontent_tagレール

<%= f.select(:visitable_id) do %> 
     <% @visitors.each do |visitor| %> 
     <%= content_tag(:option, visitor.name, value: visitor.id, data: {:type => visitor.class.name.to_s}) %> 
     <% end %> 
<% end %> 

を使用しているフォームのドロップダウンを持っています。しかし、私はcontent_tagにデータ値のデータを受け取ることも望みます。 :data:{:type => visitor.class.name.to_s}

コントローラの2番目の値にはどうやってアクセスできますか?どんな助けもありがとう!

答えて

0

HTML5のデータ属性はフォームと共に送信されません。また、入力の名前と価値を除いては何もありません。

両方の値を1つのオプションに渡すことで解決できます。

klass, id = params[:visitable_id].split('=') 

をしかし、あなたは、悪意のあるユーザーが任意のモデルを照会することができ、脆弱性を回避するためにklassの許容値をホワイトリストに登録してください:

<%= f.select(:visitable_id) do %> 
    <% @visitors.each do |visitor| %> 
    <%= content_tag(:option, visitor.name, value: "#{visitor.class.name}=visitor.id") %> 
    <% end %> 
<% end %> 

あなたは、文字列を分割し、それらを解析することができます。

+0

ありがとうございました!まさに私が探していたもの! – Mitchell

関連する問題