在我的Rails显示页面中的未定义方法

时间:2018-03-14 14:19:39

标签: ruby-on-rails

我觉得我很近但有些不对劲。我得到了未定义的方法'每个'在我的节目页面。

我的节目有以下内容:

<dl>
  <dt>Name:</dt>
  <dd><%= @region.name %></dd>
  <dt>Location</dt>
  <dd><%= @region.each do |region| %>
        <%= region.location.name %>
       <% end %> </dd>
</dl>

在我的区域控制器中,我有以下内容:

class Admin::RegionsController < Admin::ApplicationController
 belongs_to_app :regions
 add_breadcrumb 'Regions', :admin_regions_path
 before_action :load_region, only: [:show, :edit, :update, :destroy]

def index
  @regions = Region.ordered.paginate(page: params[:page])
  @regions = @regions.search(params[:search]) if params[:search]
  respond_with @regions
end

def show
  respond_with @region
end

def new
  @region = Region.new
  respond_with @region
end

def create
  @region = Region.new(region_params)
  flash[:notice] = 'Region created successfully' if @region.save
  respond_with @region, location: admin_regions_path
end

def edit
  respond_with @region
end

def update
  flash[:notice] = 'Region updated successfully' if @region.update_attributes(region_params)
  respond_with @region, location: admin_regions_path
end

def destroy
  flash[:notice] = 'Region deleted successfully' if @region.destroy
  respond_with @region, location: admin_regions_path
end

private

def load_region
  @region = Region.find_by!(id: params[:id])
end

def region_params
  params.require(:region).permit(:name, location_ids:[])
end
end

我尝试将我的位置控制器更新为:

def show
 @region = Region.find(params[:region_d])
 @location = @region.location
end

我最终得到了完全相同的未定义方法问题。我错过了一些太明显的东西,应该允许我拉出位置名称进行展示吗?

最终我只是看到类似的东西:

地区:一 地点:Alpha,Beta,Gamma

可能需要在生成的值之间插入一些内容,但这是一个不同的问题。

3 个答案:

答案 0 :(得分:3)

  

我在显示页面中显示未定义的'each'方法

     

[我在我的show方法中设置@region并且]我最终得到了完全相同的未定义方法问题

仔细查看错误消息。它是undefined method each for #<Region:1234>:Region(或类似的东西),不是吗?

@region的值不是集合,因此不知道方法.each。要避免此错误,请在相应的集合上调用.each您应用中可能存在的任何内容。似乎是@region.locations

答案 1 :(得分:1)

您需要将视图更改为

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
    <xsl:template match="/">
        <html>
            <body>
                <h2>Alphaba Resume - Long version</h2>
                <xsl:for-each select="alphabafictional_resume/objective">
                    <h2><xsl:value-of select="objective"/></h2>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

@region是单个实例,而不是数组,因此您无法在其上使用<dd> <%= @region.locations.each do |location| %> <%= location.name %> <% end %> </dd>

答案 2 :(得分:1)

所以Vasilisa给出了这个特定实例的正确答案,Sergio教我了解错过的内容/操作方式。但我想发布一个我最终使用的答案,让Vasilisa的回应更进一步,以达到我发布的预期结果。

<dd>
  <%= @region.locations.map(&:name).join(', ') %>
</dd>