Ruby on rails Rails:form_标记自定义操作出错
大约一年半前,我参加了一个使用3.2版的RubyonRails在线课程。我完成了课程并制作了应用程序,现在我将回顾课程PDF并在Rails 4.1.0中完成它 我遇到了一个错误,我不确定我是否做错了什么,或者是否有什么东西从Rails 3.2改成了4.1 我有这个表格标签:Ruby on rails Rails:form_标记自定义操作出错,ruby-on-rails,ruby-on-rails-4,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 4,Ruby On Rails 3.2,大约一年半前,我参加了一个使用3.2版的RubyonRails在线课程。我完成了课程并制作了应用程序,现在我将回顾课程PDF并在Rails 4.1.0中完成它 我遇到了一个错误,我不确定我是否做错了什么,或者是否有什么东西从Rails 3.2改成了4.1 我有这个表格标签: <%= form_tag :action => 'review', :id => @restaurant do %> <strong>Poster: </strong>&l
<%= 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 %>
但是,当我尝试查看包含for的页面时,会出现以下错误:
No route matches {:action=>"review", "controller=>"restaurants", :id=>#<Restaurant id: 1, name: "Marco & Luca", created_at: "...", updated_at: "..."
谢谢 试试看:
<%= form_tag :action => 'review', :id => @restaurant.id do %>
“回顾”:id=>@restaurant.id do%>
为此,您确实需要一条路线。它的工作方式是:
- 用户在某个页面上填写表单并将数据发送到
routereview
- 服务器处理用户数据并返回重定向到
routeshow
- 用户获得重定向并请求
路由show
- 服务器执行
操作show
review
操作的路径(或者正如我上面所说的:review
路径)在routes.rb
中不存在。加上它
UPD:您的routes文件看起来非常奇怪,您似乎没有按照常规做法在一个控制器中处理一种类型的资源。在这里,您可能需要添加:
...
post 'search'
post 'review'
# ^ THIS ^
end
end
但是您已经在一个控制器中处理了至少3种类型的资源:
User
s、Session
s和Restaurant
s。如果你被告知这样做,这可能不是你的错,但无论是哪种情况,这都不是构建应用程序的正确方法。显示路由
文件我建议看一下文档,很多事情都发生了变化,我相信你最好从总体上研究新框架,在本文档中,您将以更好的方式找到您需要和理解的所有内容。那是行不通的。您没有提交表单的途径。原因不太可能。它是关于to_param
方法的,该方法在其默认实现中只返回对象的id
。它可以被覆盖,但我怀疑它是真的。不知道他是否在使用AR或其他东西,但这在mongoid中发生过。不完全是这样。我现在得到这个错误'review':id=>@restaurant.id do%>
@D-side非常确定当您使用route helper时,会自动调用to_param
方法,但不是他使用它的方式。从ruby的角度来看,它只是创建一个普通的旧哈希,其中的值是一个实例,而不是id.OK。我在routes.rb文件的我的收藏中添加了get'review'
。这确实让页面出现了。然后,当我试图发布时,我遇到了一个错误没有与post匹配的路由。因此,我随后在我的routes.rb中添加了post'review'
,然后我得到了这一行的错误ActiveModel:forbidded Attributes error
:Restaurant.find(params[:id]).reviews.create(params[:review])
@JamesWhite请参见:
<%= form_tag :action => 'review', :id => @restaurant.id do %>
...
post 'search'
post 'review'
# ^ THIS ^
end
end