我是Ruby / Rails的新手,需要帮助完成我正在进行的任务。我应该以赞助商链接的形式向Bloccit(我正在上课的项目)添加原生广告。任何帮助将非常感激:)
需要做什么: 1)创建一个名为Advertisement的新模型。它应具有以下属性:title:string,copy:text,price:integer。
2)使用索引和显示动作为新广告模型生成控制器。控制器类和文件名是否应该具有单个(广告)或复数(广告)前缀?与用于先前生成的posts控制器类和文件的命名模式一致。
3)更新routes.rb以使用资源路由进行广告。
4)完成索引并在AdvertisementsController中显示操作。
5)更新广告索引并显示视图。
这就是我所拥有的:
首先,像这样创建模型
rails g model Advertisements title:string, copy:text, price:integer
然后,像这样创建控制器
rails g controller Advertisements index show
资源丰富的路由:
Rails.application.routes.draw do
resources :advertisement
resources :posts
get 'about' => 'welcome#about'
root to: 'welcome#index'
end
索引和显示操作:
class AdvertisementController < ApplicationController
def index
@advertisements = Advertisement.all
end
def show
@advertisements = Advertisement.find(params[:id])
end
end
索引视图:
<h1>Advertisements</h1>
<% @advertisements.each do |advertisement| %>
<% end %>
显示视图:
<h1><%= @advertisements.title %></h1>
<p><%= @advertisements.copy %></p>
<p><%= @advertisements.price %></p>
当我去localhost:3000 /广告时,我看到一个空白页面,顶部有“广告”。当我转到localhost:3000 /广告/索引时,我看到一条错误消息:
找不到'id'= index
的广告 def show
@advertisements = Advertisement.find(params[:id]) #second line highlighted in red
end
end
为什么我不能查看单个广告或看到所有广告的索引,比如我应该这样做?
答案 0 :(得分:0)
当您看到顶部只有广告的页面时,您看到所有广告的索引,它不是重复&amp;打印任何因为不存在。
无法看到一个是因为路线默认为
localhost:3000/advertisements/:id
所以它试图查找一个广告,其中:id为“index”,很可能不存在。
尝试制作广告
答案 1 :(得分:0)
在创建您要查找的路由,控制器和视图时,您会发现rails是您的朋友。这是解决问题的最简单方法:
在终端cd进入你的rails程序,然后:
rails g scaffold advertisement title:string, copy:text, price:integer
press enter and then rake db:migrate.
当你去localhost:3000 /广告索引上的广告localhost:3000 / advertisements / [some:id]是特定广告的展示页面
另外在你的索引视图中你必须使用你正在创建的块变量,在这种情况下是广告来调用页面上你想要的属性:
<%@advertisements.each do |advertisement|%>
(Which is all the advertisement being looped)
<%= advertisement.title %>
<%= advertisement.copy %>
<%= advertisement.price %>
<% end%>
您将看到各个广告的各个元素的显示
答案 2 :(得分:0)
您似乎没有为索引视图中的每个广告输出任何内容,只是在广告中循环播放:
<h1>Advertisements</h1>
<% @advertisements.each do |advertisement| %>
<% end %>
在循环中,您需要为每个广告添加希望看到的标记和ERB。
您可以通过Rails控制台播种数据库或创建广告进行测试。正如阿尔弗雷德所暗示的那样,你应该能够在:
看到id = 1localhost:3000/advertisements/1
小点,对于节目动作和视图,@ advertisement(singular)在语义上更有意义(你正在展示一个广告)。
答案 3 :(得分:0)
你忘了播种一些数据了。 在你的文件中:db / seeds.rb add:
# Create Advertisements
10.times do
Advertisement.create!(
title: Faker::Internet.domain_name,
copy: Faker::Company.catch_phrase,
price: 0
)
end
然后将此输入到您的终端:rake db:seed
如果你没有这样做,rake db:migrate
现在应该可以了。