大约一年半以前,我使用版本3.2参加了Ruby on Rails的在线课程。我完成了课程并完成了应用程序,现在我将回到课程PDF并在Rails 4.1.0中进行操作。
我得到了一个我收到错误的部分,我不确定我是做错了什么,或者是否从Rails 3.2改为4.1。
我有这个form_tag标签:
<%= form_tag :action => 'review', :id => @restaurant do %>
<strong>Poster: </strong><%= text_field "review", "poster" %><br /><br />
<strong>Date: </strong><%= datetime_select "review", "date" %><br /><br />
<strong>Review:</strong><br />
<%= text_area "review", "review", :rows => 5 %><br />
<%= submit_tag "Review" %>
<% end %>
指示说要使其工作以将以下代码放在restaurants_controller.rb文件中:
def review
Restaurant.find(params[:id]).reviews.create(params[:review])
redirect_to :action=>"show", :id => params[:id]
end
但是当我尝试查看具有for for for的页面时,我收到此错误:
No route matches {:action=>"review", "controller=>"restaurants", :id=>#<Restaurant id: 1, name: "Marco & Luca", created_at: "...", updated_at: "..."
我的佣金路线显示,节目被映射到餐馆#show被映射到餐馆路径。
form_tag文件是错误的吗?
在类的说明中我们没有在routes.rb中设置任何东西,我猜这是因为控制器文件中的redirect_to行。现在这个被弃用了吗?这不再有效吗?
按要求路由文件:(在课堂练习中我们不必编辑路线文件)。
Rails.application.routes.draw do
# You can have the root of your site routed with "root"
root 'restaurants#index'
resources :restaurants do
collection do
get 'login'
get 'register'
post 'newuser'
post 'validate'
post 'search'
end
end
谢谢!
答案 0 :(得分:1)
你确实需要一条路线。它的工作方式是:
review
路径show
路径show
路径show
操作显然review
行动的路线(或我上面称之为:review
路线)并不存在于routes.rb
中。添加它。
UPD:您的路线文件看起来很奇怪,您似乎没有按照惯例在一个控制器中处理一种类型的资源。在这里,您可能需要添加:
...
post 'search'
post 'review'
# ^ THIS ^
end
end
但您已经在一个控制器中处理了至少3种类型的资源:User
s,Session
和Restaurant
s。如果您被告知这可能不是您的错,但在任何一种情况下,它都不是构建应用程序的正确方法。
答案 1 :(得分:0)
尝试:
<%= form_tag :action => 'review', :id => @restaurant.id do %>