2014-02-20 7 views
0

Благодаря более раннему ответу у меня есть следующий код в представлении.Добавить еще один объект в link_to array

<%= @miniature.contents.where(miniature_id: @miniature).map { |content| link_to content.miniset.name, content.miniset }.join(", ").html_safe %> 

Это выводит

`Minisetname, Minisetname, Minisetname` 

Я хочу добавить (" x#{content.quantity}") после связанного Minisetname так, что она выглядит как

Minisetname (x3), Minisetname (x7), Minisetname (x4) 

Я только хочу, чтобы присоединить (" x#{content.quantity}") если content.quantity не является нулевым ,

Я делаю это в другом месте в блоке, но я не могу понять, как это сделать с указанным выше массивом.

+0

Похоже логики контроллера в вид слоя. – wurde

+0

@wurde на самом деле это, вероятно, будет вспомогательной логикой, поскольку миниатюра кажется моделью. – MCB

+0

Я вернусь в какой-то момент до запуска и переведу много логики в помощники и контроллеры. У меня еще нет помощника помощников, и у меня почти ничего нет. – Ossie

ответ

1

Во-первых, при условии, что вы установили отношения в вашей модели, как правило, я действительно не понимаю, почему вы должны нуждаться в том, что where.

Я бы тогда структурирован код что-то вроде этого:

Посмотреть

<%= content_miniset_links_with_quantity(@miniature) %> 

Helper

def content_miniset_links_with_quantity(miniature) 
    miniature.contents.map{|content| content_miniset_link_with_quantity(content)}.join(', ').html_safe 
end 

def content_miniset_link_with_quantity(content) 
    string = link_to content.miniset.name, content.miniset 
    string << "(x#{content.quantity})" if content.quantity.present? 
    return string 
end 
+0

Вышеуказанное дает мне «неопределенный метод» content''. Выделение строки '<% miniset_link_with_quantity (content.miniset)%>'. Добавление 'where' back in не помогает. – Ossie

+1

Извините, мой плохой. Я обновил пример кода, чтобы он работал. –

+1

Amazing. Именно это я и сделал. Фантастика. Я обязательно буду использовать помощников, как это в будущем. Спасибо. – Ossie

0

Вы просто положить их обоих в строке следующие link_to

link_to "#{content.miniset.name} #{content.quantity}", content.miniset }.join(", ").html_safe 

Просто убедитесь, что, однако, что вы не маркируя то, что не html_safe.

РЕДАКТИРОВАТЬ: Чтобы это появилось после этого, легко.

<ul class="items-list"> 
<% @miniature.contents.where(miniature_id: @miniature).map do |content| %> 
    <li class="item-holder"> 
    <ul class="item-details"> 
    <li class="item-link"><%= link_to content.miniset.name.html_safe, foobar_url(content.miniset.id) %>,</li> 
    <li class="item-quant">(x<%= content.quantity %>)</li> 
    </ul> 
    <li>, 
<%end%> 
</ul> 

Обратите внимание: вам действительно не нужны divs, или для этого многострочные, но это только лучший стиль. О, и второй div может быть лучше, чем промежуток, или оба внутренних div могут быть лучше, чем span, но вы получаете идею.

OH !! Я просто посмотрел на ваше место. Таким образом, это вряд ли понадобится (если содержимое не является какой-то странной неочевидной функцией, которую вы написали). @minature.contents автоматически загрузит внутреннюю объединенную ассоциацию.

ОК, поэтому здесь используется соединение.

<% @miniature.contents.where(miniature_id: @miniature).map do |content| %> 
    <%= link_to content.miniset.name, foobar_url(content.miniset.id) %> (x<%= content.quantity %>) 
<% end.join(", ") %> 
+0

Это работает, но я действительно пытаюсь сделать 'x # {content.quantity}' появляться после ссылки и не связываться с текстом. – Ossie

+1

@WorldOfProper Я обновил ответ, чтобы лучше отразить то, что вы собираетесь делать. – MCB

+0

Я забыл, что вы могли бы поместить divs в блок, но ваш код там поставит 'количество' ПОСЛЕ' join (",") ', я пытался его получить до' join (",") ' но не внутри ссылки. – Ossie

0

первое, не использовать where статья на вид. Это плохой код. И, когда вы делаете <%= =>, он фактически выводит что угодно. Вы используете функцию map, которая возвращает array. вам лучше переставить и выполнить свою работу таким образом.

<%= @miniature.contents.where(miniature_id: @miniature).map { |content| link_to "#{content.miniset.name} (x#{content.quantity})" , content.miniset if content.quantity.present? }.join(", ").html_safe %> 
+0

Чтобы избежать использования 'where', я должен был бы сделать это в контроллере правильно? Возможно ли после появления ссылки «x # {content.quantity}» появиться ссылка и не быть связанным текстом? – Ossie

Смежные вопросы