【问题标题】:How to return a string for rails view如何为rails视图返回一个字符串
【发布时间】:2011-09-17 03:08:08
【问题描述】:

使用助手中的方法相应地隐藏或显示链接。方法 new_cate?按设计工作。但是方法link_to_edit?导致以下错误:

undefined local variable or method `cate' for #<#<Class:0x4ed6a10>:0x4ed2d38>

Extracted source (around line #23):

20:   <tr>
21:     <td><%= cate.name %></td>
22:     <td><%= cate.description %></td>
23:     <td><%= link_to_edit? %>></td>
24: 
25:   </tr>
26: <% end %>

代码如下:

在 index.html.erb 中

<body>

<h2>Category</h2>
<table>
  <tr>
    <th>Category</th>
    <th>Description</th>

  </tr>

<% @categories.each do |cate| %>
  <tr>
    <td><%= cate.name %></td>
    <td><%= cate.description %></td>
    <td><%= link_to_edit? %>></td>

  </tr>
<% end %>
</table>

  <%= new_cate? %>

</body>

在 categories_helper.rb 中

  def new_cate?
    if session[:eng_dh] 
      return link_to 'New Category', new_category_path
    end
  end

  def link_to_edit?
    if session[:eng_dh]
      return link_to 'Edit', edit_category_path(cate)
    end
  end

“return”后面的代码看起来很奇怪。新品?按设计工作。但是link_to_edit?没有。

有什么想法吗?谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby model-view-controller scope


    【解决方案1】:

    您指的是方法范围变量(尚未在该范围内声明)。

    我猜你想要的是

    #in controller
    def link_to_edit cate
    if session[:eng_dh]
      return link_to 'Edit', edit_category_path(cate)
    end
    

    结束

    #in view
    <% @categories.each do |cate| %>
      <tr>
        <td><%= cate.name %></td>
        <td><%= cate.description %></td>
        <td><%= link_to_edit cate %>></td>
    
      </tr>
    <% end %>
    

    【讨论】:

    • 尝试了以下方法:返回 link_to 'Edit',edit_category_path(@cate) 并出现错误:没有路由匹配 {:action=>"edit", :controller=>"categories"}。尝试使用 |@cate|在 index.html.erb 中并收到错误:形式参数不能是实例变量'); @categories.each 做|@cate|。 helper 方法的目的是根据用户的访问权限隐藏/显示编辑链接。
    • Rails 不喜欢在视图文件中使用。这就是为什么将 if 移到帮助文件中的原因
    • 刚刚接受了答案。 BTW 该方法返回的内容是什么?它是用于 rails 视图的 html 元素吗?
    • 它返回一串HTML元素。
    【解决方案2】:

    你的 link_to_edit 函数有问题。

    在您看来,传递变量 cate。

    <td><%= link_to_edit(cate) %></td>
    

    在控制器中

      def link_to_edit(cate)
        if session[:eng_dh]
          return link_to 'Edit', edit_category_path(cate)
        end
      end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      相关资源
      最近更新 更多