Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:form_标记自定义操作出错_Ruby On Rails_Ruby On Rails 4_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails Rails:form_标记自定义操作出错

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

大约一年半前,我参加了一个使用3.2版的RubyonRails在线课程。我完成了课程并制作了应用程序,现在我将回顾课程PDF并在Rails 4.1.0中完成它

我遇到了一个错误,我不确定我是否做错了什么,或者是否有什么东西从Rails 3.2改成了4.1

我有这个表格标签:

<%= 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%>

为此,您确实需要一条路线。它的工作方式是:

  • 用户在某个页面上填写表单并将数据发送到
    review
    route
  • 服务器处理用户数据并返回重定向到
    show
    route
  • 用户获得重定向并请求
    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