是否可以在视图中定义新变量?

时间:2013-01-10 17:21:59

标签: ruby-on-rails ruby-on-rails-3

是否可以在视图中定义新变量?
我有这样的代码。但我收到错误undefined local variable or method "who"

<% @posts.each do |post| %>

    <tr id="<%= dom_post_id(post) %>">

        <% if post.user.id == who %>
            <td><%= post.user.nickname if post.user %></td>
            <td><div class="bubble me"><%= post.body %></div></td>
            <td></td>
        <% else %>
            <td></td>
            <td><div class="bubble you"><%= post.body %></div></td>
            <td><%= post.user.nickname if post.user %></td>     
        <% end %>
    </tr>
    <% who = post.user.id %>
<% end %>

3 个答案:

答案 0 :(得分:4)

是的,这是可能的,但就像普通的红宝石一样,你应该在比较它之前给它一个值。

下面:

<% if post.user.id == who %>

who还没有在任何地方看到过,所以ruby不知道这是什么。

答案 1 :(得分:1)

问题在于:

<% if post.user.id == who %>

您尚未定义who。您可以稍后使用<% who = post.user.id %>定义它,但是首次输入循环时,尚未定义who

在使用之前,您需要先定义它。

答案 2 :(得分:1)

在实际使用之前移动who top

<tr id="<%= dom_post_id(post) %>">
    <% who = post.user.id %>
    <% if post.user.id == who %>
        <td><%= post.user.nickname if post.user %></td>
        <td><div class="bubble me"><%= post.body %></div></td>
        <td></td>
    <% else %>
        <td></td>
        <td><div class="bubble you"><%= post.body %></div></td>
        <td><%= post.user.nickname if post.user %></td>     
    <% end %>
</tr>

HTH