我正在使用Rails进行编码,并且已经从rails g model
和rails g controller
创建了一个应用程序。我已经成功创建了索引,显示,创建和新操作,并且在运行服务器并检查完成后项目我有一个问题,我的@coupons
的实例变量包含在视图索引页面中,该实例变量包含创建的优惠券的数组。我没有明确称呼它,也没有显示任何东西。以下是我的index.html.erb
和CouponController
的代码。
views / index.html.erb
<h1> List of Stores with Coupons</h1>
<div>
<%= @coupons.each do |coupon| %>
<h2><%= link_to coupon.store, coupon_path(coupon) %></h2>
<% end %>
</div>
<%= form_tag new_coupon_path, :method => :get do %>
<%= submit_tag "Create New Coupon" %>
<% end %>
CouponController
class CouponsController < ApplicationController
def index
@coupons = Coupon.all
end
def new
end
def create
@coupon = Coupon.create(coupon_code: params[:coupon][:coupon_code], store: params[:coupon][:store])
redirect_to coupon_path(@coupon)
end
def show
@coupon = Coupon.find(params[:id])
end
end
创建控制器时删除了CSS。
答案 0 :(得分:4)
<%= @coupons.each do |coupon| %>
应该是
<% @coupons.each do |coupon| %>
<%=
使@coupons
在视图上输出。
答案 1 :(得分:2)
问题是您使用的是<%= %>
,而不是<% %>
。
<%= %>
输出表达式的值。 #each
的返回值是一个数组。
<% @coupons.each do |coupon| %>
<h2><%= link_to coupon.store, coupon_path(coupon) %></h2>
<% end %>
这可能有些令人困惑,但是请记住,您正在使用#each
来产生副作用-而不是返回值。对于每次迭代,<h2><%= link_to coupon.store, coupon_path(coupon) %></h2>
将添加到字符串缓冲区(呈现的视图)。