Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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 轨道4:使用形式_,无路线,柱_Ruby On Rails_Routes - Fatal编程技术网

Ruby on rails 轨道4:使用形式_,无路线,柱

Ruby on rails 轨道4:使用形式_,无路线,柱,ruby-on-rails,routes,Ruby On Rails,Routes,通过Lynda开始学习RubyonRails-非常激动,我正在尽可能多地练习。我正在关注这些练习,但培训是基于Rails 3的-到目前为止,有些用法还不被接受 情况如下: 我在subjects/new达到创建表单 填写表格 返回以下错误 没有与[POST]“/subjects/create”匹配的路由 Rails.root:/Users/alpozenalp/Sites/simple\u cms 在过去的两个小时里,我在stackoverflow、rail guide和所有其他来源周围闲逛——尝

通过Lynda开始学习RubyonRails-非常激动,我正在尽可能多地练习。我正在关注这些练习,但培训是基于Rails 3的-到目前为止,有些用法还不被接受

情况如下:

我在subjects/new达到创建表单 填写表格 返回以下错误

没有与[POST]“/subjects/create”匹配的路由

Rails.root:/Users/alpozenalp/Sites/simple\u cms

在过去的两个小时里,我在stackoverflow、rail guide和所有其他来源周围闲逛——尝试了许多变体,但都无法通过这一阶段

非常感谢你的帮助

routes.rb

SimpleCms::Application.routes.draw do

root :to => "demo#index"
get ':controller(/:action(/:id(.:format)))'

end
受试者控制器.rb

class SubjectsController < ApplicationController

def index
list
render('list')
end

def list
@subjects = Subject.order("subjects.position ASC")
end

def show
@subject = Subject.find(params[:id])
end

def new
@subject = Subject.new
end

def create
# Instantiate a new object using form parameters
@subject = Subject.new(params[:subject])
# Save the object
if @subject.save
# If save succeeds, redirect to the list action
redirect_to(:action => 'list')
else
# If save fails, redisplay the form so user can fix problems
render('new')
end
end
end
class SubjectsController'list')
其他的
#如果保存失败,请重新显示表单,以便用户可以修复问题
呈现('新')
结束
结束
结束
new.html.erb

<%= link_to("<< Back to List", {:action => 'list'}, :class => 'back-link') %>

<div class="subject new">
  <h2>Create Subject</h2>

  <%= form_for(:subject, :url => {:action => 'create'}, :method => :post) do |f| %>

    <table summary="Subject form fields">
      <tr>
        <th>Name</th>
        <td><%= f.text_field(:name) %></td>
      </tr>
      <tr>
        <th>Position</th>
        <td><%= f.text_field(:position) %></td>
      </tr>
      <tr>
        <th>Visible</th>
        <td><%= f.text_field(:visible) %></td>
      </tr>
    </table>

    <div class="form-buttons">
      <%= submit_tag("Create Subject") %>
    </div>

  <% end %>
</div>
'list'},:class=>'backlink')%>
创建主题
{:action=>'create'},:method=>:post)do | f |%>
名称
位置
看得见的

只要这样做,就不会有任何问题

<%= form_for @subject do |f| %>
如果
@subject
是现有记录(id为1),您将获得

<form action="/subjects" method="post">
  ...
<form action="/subjects/1" method="post">
  <input type="hidden" name="_method" value="put">
  ...
变成这样

<%= link_to '&laquo; Back to List'.html_safe, subjects_path, class: 'back-link' %>

naomik的回答肯定会帮助表单更简洁,但听起来你只需要在
config/routes.rb
文件中为主题添加一条路线:

SimpleCms::Application.routes.draw do

  resources :subjects    
  root :to => "demo#index"

end
更多信息请访问


编辑:根据naomik的建议,删除了默认的后备路线。

我在Lynda.com课程中遇到了同样的问题。通过在
get:'controller(/:action(/:id(:format))”
上方添加
resources:subjects
,然后将subjects\u controller
create
action更改为

def create
    @subject = Subject.new(params.require(:subject).permit(:name, :position, :visible))
    if @subject.save
        redirect_to(:action => 'list')
    else
        render('new')
    end
end
这避免了之前编写的操作中出现的禁止属性错误


因为我添加了
resources:subjects
,这就意味着上面的
重定向到(:action=>'list')
将创建一个错误,其内容是“找不到id=list的主题”。为了解决这个问题,我在
resources:subjects
路线上方添加了
get'subjects/list'=>“subjects#list'
(我不知道这是否是一个“正确”的做法,但它现在起作用)。

我已经完成了课程,我的路线如下所示:

Cms2::Application.routes.draw do  

root to: "public#index"
get 'admin', :to => 'access#menu'
get 'show/:id', :to => 'sections#show'
get ':controller(/:action(/:id(.:format)))'  

post "admin_users/update"
post "subjects/update"
post "pages/update"
post "sections/update"

post "subjects/destroy"
post "subjects/create"

post "pages/destroy"
post "pages/create"

post "sections/destroy"
post "sections/create"

post "admin_users/destroy"
post "admin_users/create"

post "access/attempt_login"

get "access/logout"

end
我的def create控制器如下所示:

    def create
#new_position = params[:subject].delete(:position)
# Instantiate a new object using form parameters
@subject = Subject.new(params.require(:subject).permit(:name, :position, :visible, :created_at, :updated_at))
# Save the object
if @subject.save
  #@subject.move_to_position(new_position)
  # If save succeeds, redirect to the list action
  flash[:notice] = "Subject Created."
  redirect_to(:action => 'list')
else
  # If save fails, redisplay the form so user can fix problems
  @subject_count = Subject.count +1
  render('new')
end
end

希望有帮助

而且
我不会为新手建议后备路线。这是非常老派的Ruby-on-Rails。如果操作只是从Rails 4开始,我会让他们从右脚开始。naomik:这是一个很好的观点。但是,这已经在上面的OP发布的路由文件中了。我刚刚添加了
subjects
resource非常感谢-但是在删除回退路径后,现在我在SubjectsController中找到了ActiveRecord::RecordNotFound#show找不到id=show Extracted source的Subject(在第13行附近):11 12 13 14 15 def show@Subject=Subject.find(参数[:id])end def new Rails.root:/Users/alpozenalp/Sites/simple\cmsso它试图路由到subjects/id=show或id=list,而路由应该是subjects/show,subjects/list有什么建议吗?嗯,我不太确定。“找不到主题”意味着你可能试图查看或编辑一些不存在的内容?我不确定。但老实说,从你给出的代码来看,我不确定林达的课程是否很好。为了更好、更免费(在线图书版本是——但有些付费视频或印刷图书不是免费的),我建议看一看这个教程(它总是保持最新的):
    def create
#new_position = params[:subject].delete(:position)
# Instantiate a new object using form parameters
@subject = Subject.new(params.require(:subject).permit(:name, :position, :visible, :created_at, :updated_at))
# Save the object
if @subject.save
  #@subject.move_to_position(new_position)
  # If save succeeds, redirect to the list action
  flash[:notice] = "Subject Created."
  redirect_to(:action => 'list')
else
  # If save fails, redisplay the form so user can fix problems
  @subject_count = Subject.count +1
  render('new')
end
end