变量/动态内容正在根据<div>改变 - 为什么?</div>

时间:2011-08-15 03:29:54

标签: ruby-on-rails variables html facebox

我在partial中有一些意外行为,在users / show.html.erb中呈现了9次。 (访问www.nowdoing.com/users/2看看我的意思。)以下是部分的相关部分(为了调试目的,这是冗长的):

<%= "object 1 = #{object.content}" %>

<div id="float_have" style="display:none;"> 
   <%= "object 2 = #{object.content}" %>
   <%= render :partial => 'nowposts/floatpost', :locals => { :object => object.content } %>  
</div>

<%= "object 3 = #{object.content}" %>

<a href="#float_have" rel="facebox">Have!</a> | 

在方框#1中,:object =&gt; “#nowreading book”

在方框#2中,:object =&gt; “#nowlistening song”

尽管如此,我在加载网页时看到以下内容:

 object 1 = "#nowreading book"
 object 2 = "#nowreading book"
 object 3 = "#nowreading book"

对于方框#1来说这是有意义的。但是以下对于#2框没有意义:

 object 1 = "#nowlistening song"
 object 2 = "#nowreading book"        *** this is wrong
 object 3 = "#nowlistening song"

有人可以向我解释为什么将“#{object.content}”放在facebox DIV中会导致内容发生变化吗?我发现这种行为非常特殊。非常感谢您的帮助!

---编辑---

在users / show.html.erb中:

            <%= render :partial => 'nowposts/nowpost',
                       :locals => {:object => @nowreading,
                                   :object_link => @reading_link,
                                   :object_mode => "reading",
                                   :doing_img => @reading_img,
                                   :doing_url => @reading_url_text
                                    } %>

            <%= render :partial => 'nowposts/nowpost',
                       :locals => {:object => @nowlistening,
                                   :object_link => @listening_link,
                                   :object_mode => "listening",
                                   :doing_img => @listening_img,
                                   :doing_url => @listening_url_text
                                    } %>

在nowposts / _nowpost.html.erb:

        <div class ="status bl br">
            Fresh on <%= object.updated_at.strftime("%b %d, %Y") %><br \>
            <% if user_signed_in? %> 
 <%= "object 1 = #{object.content}" %>
                <div id="float_have" style="display:none;"> 
                    <%= "object 2 = #{object.content}" %>
                    <%= render :partial => 'nowposts/floatpost', :locals => { :object => object.content } %>  

                </div>

                <div id="float_wanna" style="display:none;"> 
                    <%= "object 3 = #{object.content}" %>
                    <%= render :partial => 'wishlists/floatpost', :locals => { :object => object.content } %>  

                </div>  
                <a href="#float_have" rel="facebox">Have!</a> | 
                <a href="#float_wanna" rel="facebox">Wanna!</a> 

            <% end %>
        </div>

在application.html.erb中:

    <script type="text/javascript">
        jQuery(document).ready(function($) {
          $('a[rel*=facebox]').facebox({
            loadingImage : '../images/loading.gif',
            closeImage   : '../images/closelabel.png'
          })
        })
      </script>     

部分nowposts / _floatpoast.html.erb

    <h2>Wanna!</h2>
    <h3>You wanna do this?  Great, put it on your bucket list. </h3>

    <%= form_for(:wishlist, :as => @wishlist, :url => {:controller => "wishlists", :action => "create", :user_id => current_user } ) do |f| %>

    <p><%= f.label :content %><br />
    <%= f.text_field :content, :value => object, :size => "80" %></p>

      <p><%= f.submit "Post!" %></p>
    <% end %>

正如我在下面的评论中所提到的,在我实现API结果的缓存和这些嵌套路由之前,此代码在我上一次提交(几天前)中工作:

resources :users 
  resources :nowposts, :only => [:have_create, :create, :new, :show]
end

但我认为这不是问题所在。我刚刚运行了另一个测试,而object.content只在我在这个div里面时才会改变:

  <div id="float_have" style="display:none;">

我尝试了另一个随机div:

  <div id="status">
     <%= "object 2 = #{object.content}" %>
  </div>

并且显示正确。这让我觉得问题是Facebox脚本?但如果是这样,我想知道为什么它在几天前就有用了。

如果您还有其他需要,请告诉我。

1 个答案:

答案 0 :(得分:0)

我根本不懂你的代码,它太含糊了。 'object'对于变量来说是一个非常可怕的名称,而内容对于属性来说是一个非常糟糕的名称。此外,这里局部渲染的局部变量没有多大意义({:object =&gt; object.content} ????)。如果您需要帮助,请尝试澄清这意味着什么。

话虽如此,您可以从

更改每个调试语句
<%= "object 1 = #{object.content}" %>

<%= "object 1 = #{object.inspect}" %>
<%= "object 1 content = #{object.content.inspect}" %>

并显示结果。