リンクのネストされたドロップダウンメニューを作成するRailsヘルパーを作成しようとしています。リンクのトップは「すべて」または現在のパラメータです。ドロップダウンには、現在のパラメータがある場合はそれを返します。キーでハッシュにアクセスする方法
<ul>
<li><a href="">All</a>
<ul>
<li><a href="">Discussions</a></li>
<li><a href="">Snaps</a></li>
<li><a href="">Code</a></li>
<li><a href="">Links</a></li>
</ul>
</li>
</ul>
しかし、私は '議論' のpost_type
のparamを持っていたならば、私が見るであろう:私の見解では
<ul>
<li><a href="">Discussions</a>
<ul>
<li><a href="">All</a></li>
<li><a href="">Snaps</a></li>
<li><a href="">Code</a></li>
<li><a href="">Links</a></li>
</ul>
</li>
</ul>
を私が見るであろう何post_type
のparamを持っていない場合、例えば
、私は持っています:
<ul class="filter-menu">
<li>
<%= current_post_type(params) %>
<ul class="filter-menu__drop-down">
<%= list_post_types(params) %>
</ul>
</li>
</ul>
私のヘルパーで私は持っています:
module PostsHelper
def post_types
@post_types = {
:all => {
:text => 'All post types',
:icon => 'icon-file-text2',
:post_type => nil}
}, {
:discussions => {
:text => 'Discussions',
:icon => 'icon-bubbles2',
:post_type => 'discussions'}
}, {
:snaps => {
:text => 'Snaps',
:icon => 'icon-images',
:post_type => 'snaps'}
}, {
:code => {
:text => 'Code',
:icon => 'icon-embed2',
:post_type => 'code'}
}, {
:links => {
:text => 'Links',
:icon => 'icon-link',
:post_type => 'links'}
}
end
def post_type_text(icon, text, drop_down = false)
raw('<i class="' + icon + '"></i> ' + text + (drop_down ? ' <span class="chevron">▾</span>' : ''))
end
def post_type_path(post_type)
posts_path(:filter => params[:filter], :time => params[:time], :post_type => post_type)
end
def current_post_type(params)
if params[:post_type].present? # todo: check matches above
post_type = params[:post_type].downcase
link_to post_type_text(post_types[post_type][:icon], post_types[post_type][:text], true), post_type_path(post_types[post_type][:post_type])
else
link_to post_type_text(post_types[:all][:icon], post_types[:all][:text], true), post_type_path(post_types[:all][:post_type])
end
end
def list_post_types(params)
post_types.each do |post_type| # todo: exclude current post_type
link_to post_type_text(post_types[post_type][:icon], post_types[post_type][:text]), post_type_path(post_types[post_type][:post_type])
end
end
end
どうすればハッシュにアクセスできますか?エラーが発生する
no implicit conversion of Symbol into Integer
post_types[:all]
の場合エラーが発生します。
post_types
はハッシュの配列を返しているので、私が望むものはキー名でアクセス可能なハッシュのハッシュです。
私はpost_types[0][:all][:icon]
経由:all
にアクセスすることができましたが、私はpost_type
は、私がアクセスしようとしていますpost_type
キーの名前ですpost_types[post_type][:icon]
経由してアクセスしたいので、これは、私の他のハッシュのために動作しません。
paramを使用して直接アクセスする方法はありますか?例えば'params [:post_type]'とそれからハッシュの配列にアクセスしますか? – Cameron
私はこの質問を理解していません。 'post_type.each'の中に' puts post_type.inspect'や 'binding.pry'を直接使うと、必要なものすべてを手に入れることができます。 – mudasobwa
さて、私はそのリストからキー名でハッシュを取得する必要があります。したがって、 'params [:post_type]'が 'discussion'であれば、' discussion: 'にアクセスしてその値にアクセスしたいので、そのリンクを作成することができます。 – Cameron