2014-02-20 6 views
0

이전 답변 덕분에 다음 코드를 볼 수 있습니다.link_to 배열에 다른 객체 추가

`Minisetname, Minisetname, Minisetname` 

내가 난 단지는 (" x#{content.quantity}")content.quantity 경우를 추가 할

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

정도로 나타나는 것을 링크 Minisetname(" x#{content.quantity}")를 추가 할 출력

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

는 null가 아닌 .

블록의 다른 위치에서이 작업을 수행하지만 위의 배열을 사용하여 작업하는 방법을 배울 수 없습니다.

+0

는 뷰 계층의 컨트롤러 로직처럼 보인다. – wurde

+0

@wurde 사실상 미니어처가 모델 인 것처럼 보이기 때문에 헬퍼 로직이 될 것입니다. – MCB

+0

나는 시작하기 전에 어느 시점에서 돌아와서 많은 논리를 도우미와 컨트롤러로 옮길 것이다. 나는 도우미의 행방을 아직 가지지 않고 간신히 그들 안에 아무것도 가지고 있지 않다. – Ossie

답변

1

첫째, 당신은 당신이 where 것을 필요로해야하는 이유 일반적으로 정말 보이지 않는 당신의 모델에 관계를 설정 한 것으로 가정. 나는 다음과 같은 코드 뭔가를 구조화 한 것이다

:

보기

<%= content_miniset_links_with_quantity(@miniature) %> 

도우미

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'를 다시 추가하는 것은 도움이되지 않습니다. – Ossie

+1

죄송합니다. 내 잘못입니다. 작동하도록 코드 예제를 업데이트했습니다. –

+1

놀라운. 그게 바로 내가 한 것입니다. 환상적. 나는이 같은 도우미를 미래에 반드시 사용해야 할 것입니다. 정말 고마워. – Ossie

0

당신은 당신이 html_safe이 아니라 뭔가에 레이블을하지 않는 그이지만

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

그냥 확인 LINK_TO 다음 문자열에서 둘 다 넣어.

편집 : 이후에 나타나기 쉽습니다.

<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> 

실제로 div가 필요하지 않거나 여러 줄로 작성해야하지만 실제로는 더 나은 스타일입니다. 아, 두 번째 div가 span이되는 것이 더 나을 수도 있고, 두 가지 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

블록에 div를 넣을 수는 있지만 코드는'join (",")'이후에'quantity'를 넣을 것임을 잊어 버렸습니다.'join (",")' 링크 안에는 없습니다. – Ossie

0

첫 번째 것은보기에서 where 절을 사용하지 마십시오. 그것은 나쁜 코드입니다. 그리고, 당신이 <%= =>을 할 때, 그것은 실제로 아무 것도 출력하지 않습니다. array을 반환하는 map 함수를 사용하고 있습니다. 당신은 오히려 재 배열하고 이런 식으로 당신의 일을해야합니다.

<%= @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