Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3,将局部变量传递给局部变量_Ruby On Rails_Ruby On Rails 3_Partial_Locals - Fatal编程技术网

Ruby on rails Rails 3,将局部变量传递给局部变量

Ruby on rails Rails 3,将局部变量传递给局部变量,ruby-on-rails,ruby-on-rails-3,partial,locals,Ruby On Rails,Ruby On Rails 3,Partial,Locals,可能重复: 我想把局部变量(模型中没有相关字段)传递给partial # infos/index.html.erb <%= render :partial => 'info', :locals => {:info => first, :img_style => "original"} %> EDIT2: 甚至简单 <%= img_style %> EDIT3: 观点 #infos/index.html.erb {@img_style=>@

可能重复:

我想把局部变量(模型中没有相关字段)传递给partial

# infos/index.html.erb

<%= render :partial => 'info', :locals => {:info => first, :img_style => "original"} %> 
EDIT2:

甚至简单

<%= img_style %>
EDIT3:

观点

#infos/index.html.erb
{@img_style=>@aimg_style}%>
  • '信息',:对象=>e%>

#infos/_info.html.erb


...

最后

这不起作用:

# infos/index.html.erb
<% first = @infos.shift %>
<div class="boxEvent">
  <% @aimg_style = "original"%>
  <%= first %>
  <%= render 'info', :locals => {:info => first, :img_style => @aimg_style } %>
</div>
#infos/index.html.erb
{:info=>first,:img_style=>@aimg_style}%>
这项工作:

# infos/index.html.erb
  <% @infos.each do |e| %>
    <li>
      <div class="boxEvent">
        <%= render :partial => 'info', :locals => {:info => e, :img_style => "original"} %>
      </div>
    </li>
  <% end %>
#infos/index.html.erb
  • 'info',:locals=>{:info=>e,:img_style=>“original”}%>

  • 有人知道为什么吗?

    我实际上只是在Rails 3中使用了以下语法:

    render "a_partial", :a_local_variable => whatever, :another_variable => another
    
    这应该起作用:

    <%= render :partial => "info", :locals => { :img_style => "original" } %>
    
    “info”,:locals=>{:img_style=>“original”}%>
    
    有了这一部分:

    # infos/_info.html.erb
    <%= image_tag(info.image.url, :class => img_style),  info %>
    
    #infos/_info.html.erb
    img_风格),信息%>
    
    但是,如果您将部分调用错误,请尝试将此作为部分调用:

    # infos/_info.html.erb
    <%= image_tag(info.image.url(img_style)),  info %>
    
    #infos/_info.html.erb
    
    您的代码(您在第一行中显示的代码)应该可以工作。没有错误。我甚至亲自测试过它,它对我很有效

    此类错误的常见原因如下:

    • 拼写错误的变量名
    • 也可以从其他地方调用partial,在那里您没有传递a:local
    您的模型没有“img_样式”属性这一事实并不重要

    我可以在你的
    infos/index.html.erb
    中看到,你有两个地方可以调用
    render:partial=>'info',:object=>…
    ,而这里没有:locals。只是行号与您之前发布的stacktrace不匹配,所以很难说是哪个调用导致了问题

    我想对
    render
    方法的两个调用都需要更正

    在第一个示例中,请指定,并调用
    render:partial=>“info”
    ,而不是
    render“info”
    。这可能是Rails中的一个bug,但出于某种奇怪的原因:在本例中,本地代码似乎没有传递给视图


    在对
    render
    的第二次调用中,只需添加:locals。

    我认为问题在于后面的
    ,info
    调用。它正在
    info
    对象中查找
    img\u样式
    。你不需要它

    我喜欢使用partials,但最近也看到了helper方法的美妙之处,尤其是像这样的简单渲染

    def info_image(info, class_name="original")
       image_tag(info.image.url, :class => class_name)
    end
    
    那就

    <%= info_image(first) %>
    
    
    

    
    
    在视图中。干净多了


    如果它变得更复杂的话。您只需在一个地方更改代码。

    我在这方面花了几个小时;从某种意义上说,,
    render:partial=>?,:局部变量=>(..}
    如果你第一次打电话:

    render :partial => ? without a locals hash
    
    然后使用局部散列调用render
    :partial=>?
    ,局部散列不会传递给视图

    如果第一个调用包含一个本地散列,其变量设置为
    '

    然后第二个调用将使用实际值。

    哪一行代码在哪一个文件中?是
    吗?这可能没什么-因为您的问题已经包含了正确的代码-但是使用速记语法将导致此失败:
    呈现“info”,:locals=>{…}
    。如果显式调用分部函数,
    render:partial=>'info',:locals=>{…}
    ,那么我看不出这不起作用的任何原因。正如@Arsen7所建议的,了解您的分区如何嵌套在模板中会很有帮助。@Arsen7错误是在从浏览器输入/输入信息时引发的。我想在不使用重复的分区的情况下执行此操作(每个分区对应于每个样式,例如:_info_small.html.erb、_info_original.html.erb等)您的模型不需要img_样式的字段。您在调用分部时定义它。如果现在的问题是“为什么?”那么我会说这是Rails中的一个缺陷。但通常在编程中,尽可能具体是好的。猜测和魔术通常会导致挫败。如果我想渲染分部,那么我应该明确地说。在这里遵守那条规则会意外地救你的。。这种语法也不适用于
    未定义的局部变量或方法'img#u style'
    它应该可以正常工作。必须从其他范围内访问该变量。如果它仍然不适用于您,则可能缓存了部分变量。要检查是否在分部的开头添加任何垃圾(例如一行“lalala”),并检查这次是否将该值传递给分部。这不是错误,而是功能。:)听起来像是说对
    render
    的第一次调用会中断对
    render
    的后续调用。我从未经历过这种行为。你能详细说明或澄清一下吗?谢谢。这确实是一个非常简单的“特性”。如果您的
    partial
    请求
    foo
    ,则调用
    render partial
    而不传递
    foo
    的值将导致未定义的变量错误。因此,代码不是在传递变量的地方中断的,而是在不传递变量的地方中断的。顺便说一句,如果你真的想有一个“可选”的局部变量,在部分中用
    defined?
    来保护它,就像这样:
    foo if defined?foo
    <%= render :partial => "info", :locals => { :img_style => "original" } %>
    
    # infos/_info.html.erb
    <%= image_tag(info.image.url, :class => img_style),  info %>
    
    # infos/_info.html.erb
    <%= image_tag(info.image.url(img_style)),  info %>
    
    def info_image(info, class_name="original")
       image_tag(info.image.url, :class => class_name)
    end
    
    <%= info_image(first) %>
    
    <%= info_image(first, "anotherclass") %>
    
    render :partial => ? without a locals hash