首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示视图返回错误:未定义的方法“View”

显示视图返回错误:未定义的方法“View”
EN

Stack Overflow用户
提问于 2015-12-01 06:23:29
回答 3查看 347关注 0票数 1

我在Stack溢出网站上研究了这个话题,但我似乎仍然找不出我做错了什么。

我的show.html视图文件正在抛出此错误:

代码语言:javascript
复制
undefined method `each' for #<Advertisement:0x007fce42676a70>

当我在本地浏览器中点击我的个人广告时。

我的show.html视图代码:

代码语言:javascript
复制
<h1><%= @advertisement.title %></h1>

<%= link_to "Edit advertisement", edit_advertisement_path, class: 'btn btn-success' %>
<%= link_to "Delete advertisement", @advertisement, method: :delete, class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete this advertisement?' } %>

<div class="row">
  <div class="col-md-8">
    <p class="lead"><%= @advertisement.copy %></p>
    <% @advertisement.each do |advertisement| %>
    <div class="media">
      <div class="media-body">
        <h4 class="media-heading">
          <%= link_to advertisement.title, advertisement_path(@advertisement) %>
        </h4>
      </div>
    </div>
  <% end %>
  </div>
  <div class="col-md-4">
    <%= link_to "New Advertisement", new_advertisement_path(@advertisement), class: 'btn btn-success' %>
  </div>
</div>

我的广告控制器代码:

代码语言:javascript
复制
class AdvertisementsController < ApplicationController
  def index
    @advertisements = Advertisement.all
    # render('advertisements/index.html.erb')
  end

  def show
    # raise 'this is the show action'
    @advertisement = Advertisement.find(params[:id])
    # render 'advertisements/index.html.erb'
  end

  def edit
    @advertisement = Advertisement.find(params[:id])
  end

  def new
    @advertisement = Advertisement.new
  end

  def create
    @advertisement = Advertisement.new
    @advertisement.title = params[:advertisement][:title]
    @advertisement.copy = params[:advertisement][:copy]
    @advertisement.price = params[:advertisement][:price]

    if @advertisement.save
      flash[:notice] = "Advertisement was saved."
      redirect_to @advertisement
    else
      flash[:error] = "There was an error saving the advertisement. Please try again."
      render :new
    end
  end

  def update
    @advertisment = Advertisement.find(params[:id])
    @advertisment.title = params[:advertisement][:title]
    @advertisment.copy = params[:advertisement][:copy]
    @advertisment.price = params[:advertisement][:price]

    if @advertisement.save
      flash[:notice] = "Advertisement was updated."
      redirect_to @advertisement
    else
      flash[:error] = "Error saving advertisement. Please try again."
      render :new
    end
  end
end

通过研究,我相信我的问题是advertisement对象必须是一个数组。我需要更改什么才能使“秀”视图正常工作?提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-01 06:28:37

问题和解释:

代码语言:javascript
复制
undefined method `each' for #<Advertisement:0x007fce42676a70>

错误信息给出了提示。可以对集合类型对象(如数组或ActiveRecordRelation类型对象)调用ActiveRecordRelation。在这种情况下,您不能(也不应该)调用.each,因为没有什么可以循环或迭代。这里只有一个对象:

代码语言:javascript
复制
@advertisement = Advertisement.find(params[:id])

对于索引视图,在相应的控制器操作中有以下内容:

代码语言:javascript
复制
@advertisements = Advertisement.all

它为您提供了一个Advertisement对象的集合。在这种情况下,您可以在视图中执行:@advertisements.each do ....

但是,对于show操作,@advertisementAdvertisement类的单个对象。因此,您不应该也不能尝试循环插入。只需在@advertisement视图中显示该show对象的相应属性/列值即可。

解决方案:

因此,将您的show.html.erb更改为此(不使用.each),这将解决您的问题:

代码语言:javascript
复制
<div class="row">
  <div class="col-md-8">
    <p class="lead"><%= @advertisement.copy %></p>
        <div class="media">
          <div class="media-body">
            <h4 class="media-heading">
              <%= link_to @advertisement.title, advertisement_path(@advertisement) %>
            </h4>
          </div>
        </div>
  </div>
  <div class="col-md-4">
    <%= link_to "New Advertisement", new_advertisement_path(@advertisement), class: 'btn btn-success' %>
  </div>
</div>
票数 2
EN

Stack Overflow用户

发布于 2015-12-01 06:34:04

在您的show视图中尝试如下:

代码语言:javascript
复制
<h1><%= @advertisement.title %></h1>

<%= link_to "Edit advertisement", edit_advertisement_path, class: 'btn btn-success' %>
<%= link_to "Delete advertisement", @advertisement, method: :delete, class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete this advertisement?' } %>

<div class="row">
  <div class="col-md-8">
    <p class="lead"><%= @advertisement.copy %></p>

    <div class="media">
      <div class="media-body">
        <h4 class="media-heading">
          <%= link_to @advertisement.title, advertisement_path(@advertisement) %>
        </h4>
      </div>
    </div>

  </div>
  <div class="col-md-4">
    <%= link_to "New Advertisement", new_advertisement_path, class: 'btn btn-success' %>
  </div>
</div>
票数 0
EN

Stack Overflow用户

发布于 2015-12-01 06:35:34

要显示所有广告,您应该使用索引方法,而在显示特定广告时,可以使用以下显示方法:

代码语言:javascript
复制
# Advertisement controller
def index
    @advertisements = Advertisement.all
end

def show
    @advertisement = Advertisement.find(params[:id])
end

index.html.erb

代码语言:javascript
复制
<div class="row">
    <div class="col-md-8">
        <% @advertisements.each do |advertisement| %>
            <p class="lead"><%= advertisement.copy %></p>
            <div class="media">
                <div class="media-body">
                    <h4 class="media-heading">
                        <%= link_to advertisement.title, advertisement_path(advertisement) %>
                    </h4>
                </div>
            </div>
            <%= link_to "Edit advertisement", edit_advertisement_path(advertisement), class: 'btn btn-success' %>
<%= link_to "Delete advertisement", advertisement, method: :delete, class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete this advertisement?' } %>
        <% end %>
  </div>
  <div class="col-md-4">
      <%= link_to "New Advertisement", new_advertisement_path, class: 'btn btn-success' %>
  </div>
</div>

show.html.erb

代码语言:javascript
复制
<div class="row">
    <div class="col-md-8">
        <p class="lead"><%= @advertisement.copy %></p>
        <p class="lead"><%= @advertisement.title %></p>
    </div>
</div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34013898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档