1

私はRailsを学んでいて、少し立ち往生しています。

simple-navigation gem を使用してカスタム レンダラーを構築しています。構成オプションが存在する場合は、HTML 要素にブートストラップ アイコンを追加したいと考えています。「引数の数が間違っています (1 に対して 0)」というエラーが表示されますが、これは私のメソッドに関係していると思います。メソッドを次のように定義しようとしました。

content_tag('span', (content_tag(:i, nil, :class => item.html_options[:opts][:icon]) + item.name if have_icon?), link_options_for(item).except(:method))

def have_icon?(item)
    !item.html_options[:opts][:icon].blank?
end

content_tag を正しく書いたかどうかわかりません。実際、私はそうしなかったと確信しています。item.html_options[:opts]また、またはが欠落しているため、「間違った数の引数」を取得していると思いますitem.html_options[:opts][:icon]。そのため、メソッドの記述が不十分であることを指摘しています。

誰か助けてくれませんか?


編集:

私はコードを書き直して動作しますが、私の質問はまだ残っているので、コーディングが上手になるかもしれません. だから私の質問は、メソッドは正しいですか、またはとhave_icon?の両方が存在する場合、ブール値を返すようにどのように書き直しますか?[:opts][:opts][:icon]

これは作業コードです:

content_tag('span', name_with_icon(item), link_options_for(item).except(:method))

def name_with_icon(item)
  if item.html_options[:opts]
    if item.html_options[:opts][:icon]
      content_tag(:i, nil, :class => item.html_options[:opts][:icon]) + item.name
    else
      item.name
    end
  else
    item.name
  end
end
4

1 に答える 1

0

大まかに(ハッシュ値にアクセスするgetかどうかは思い出せません):fetch

def name_with_icon(item)
  icon = item.html_options[:opts].andand.fetch[:icon]
  content = icon ? content_tag(:i, nil, class: icon) : ""
  "#{content}#{item.name}"
end

これはandand gemを前提としています。または、 を使用できますtry

于 2013-11-04T14:59:08.130 に答える