1

私はこの機能を持っていますmodule MessagesHelper:

def message_block( message, ticket, comment )
  content_tag( :div, :class => "message", :id => "message-" + message.id.to_s ) do
    content_tag( :p, message.body, :class => "message-body", :id => "message-body-" + message.id.to_s ) +

    content_tag( :div,  content_tag( :a, "add comment", :id => "comment-link-" + ticket.id.to_s, :class => "comment-link" ), :id => "comment-" + ticket.id.to_s, :class => "comment" ) +

    form_for( comment, :html => { :class => "add-comment", :id => "add-comment-" + ticket.id.to_s } ) do |f|
      f.label :body, "add comment"
      f.text_area :body
      f.submit "add comment"
    end
  end
end

この期待される結果を得るには:

<div class="message">
  <p></p>
  <div class="comment">
  </div>
  <form class="add-comment">
  </form>
</div>

私の部分的な見解では、_messages.html.erb:

<% if !@message.nil? %>
  <% @message.each do |m| %>
  <%= message_block( m, @ticket, @comment ) %>
<% end %>

text_areaDOM にも読み込まれず、add commentボタンしか表示されません。これはすべてTicketController(notMessageControllerまたはCommentController) にあります。

私の問題に対する助けは素晴らしいでしょう。ありがとうございました。

4

2 に答える 2

2

この同じ問題に遭遇したと思います。私が見つけたのは、ヘルパーが文字列のみを返すことです。したがって、ヘルパーで「f.submit "add comment"」によって生成された最後の出力が返され、ビュー テンプレートに入れられます。これを回避するには、すべての文字列出力を連結し、ヘルパーの最後でその大きな文字列を返す必要があります。これがあなたの質問に対処することを願っています。

これは、ヘルパーを単一の出力に制限するための規則だと思います。それ以外の場合は、おそらくパーシャルが適しているためです。

気をつけて!

于 2012-05-09T01:18:37.947 に答える
1

あなたはヘルパーを読んで維持するのがかなり難しいです。パーシャルの使用を検討することをお勧めします。

これが例です。多くのフォームをレンダリングしたいとしましょう。フォームに含めるヘッダー、フォームのオブジェクト、およびフィールドのリストを受け入れるヘルパーを作成することを検討しているとします。ここでパーシャルによる解決策。

あなたに作成しますviews/shared/_render_some_stuff.erb(最初のアンダースコアに注意してください):

<%= title %>
<%= form_for object do |f| %>
    <% fields.each do |field_name| %>
        <%= f.label field_name %>
        <%= f.text_field field_name %>
    <% end %>
<% end %>

そして、この方法で任意のビューに「注入」します。

<%= render 'shared/render_some_stuff', 
            title: 'Hello', object: Product.first, fields: [:title, :price] %>

(注:ここでは最初にアンダースコアはありません。ディレクトリ内のパーシャルを区別するために必要ですが、ここでは必要ありません)

私はそれがあなたのアプローチに勝ると思いますか?

于 2012-05-08T21:47:10.913 に答える