Ruby on rails 在rails 3.2中实现创建时发生路由错误

Ruby on rails 在rails 3.2中实现创建时发生路由错误,ruby-on-rails,ruby-on-rails-3,routing,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Routing,Ruby On Rails 3.2,我是rails新手。我在尝试实现创建操作时遇到以下错误 Routing Error No route matches {:action=>"show", :controller=>"settings", :format=>nil} 我的控制器文件如下所示:- @settings = Setting.new(params[:settings]) respond_to do |format| if @settings.save format.html { r

我是rails新手。我在尝试实现创建操作时遇到以下错误

Routing Error

No route matches {:action=>"show", :controller=>"settings", :format=>nil}
我的控制器文件如下所示:-

   @settings = Setting.new(params[:settings])

respond_to do |format|
  if @settings.save
    format.html { redirect_to @settings, notice: 'Setting was successfully created.' }
    format.json { render json: @settings, status: :created, location: @settings }
  else
    format.html { render action: "new" }
    format.json { render json: @settings.errors, status: :unprocessable_entity }
  end
end
resources :settings do
    member do
     post 'add'
     post 'remove'
     get 'settings/id'
    end

    collection do
     get  'add'
     get  'list' 
     post 'get_settings'
     get  'get_settings'
    end
  end

  resources :settings 
结束

我的Routes.rb文件如下:-

   @settings = Setting.new(params[:settings])

respond_to do |format|
  if @settings.save
    format.html { redirect_to @settings, notice: 'Setting was successfully created.' }
    format.json { render json: @settings, status: :created, location: @settings }
  else
    format.html { render action: "new" }
    format.json { render json: @settings.errors, status: :unprocessable_entity }
  end
end
resources :settings do
    member do
     post 'add'
     post 'remove'
     get 'settings/id'
    end

    collection do
     get  'add'
     get  'list' 
     post 'get_settings'
     get  'get_settings'
    end
  end

  resources :settings 
我的rake routes具有以下功能:-

      GET    /settings/get_settings(.:format
settings#get_settings
                      GET    /settings(.:format)
settings#index
                      POST   /settings(.:format)
settings#create
                      GET    /settings/new(.:format)
settings#new
                      GET    /settings/:id/edit(.:format)
settings#edit
                      GET    /settings/:id(.:format)
settings#show
                      PUT    /settings/:id(.:format)
settings#update
                      DELETE /settings/:id(.:format)
settings#destroy
                      GET    /settings(.:format)
settings#index
                      POST   /settings(.:format)
settings#create
                      GET    /settings/new(.:format)
settings#new
                      GET    /settings/:id/edit(.:format)
settings#edit
                      GET    /settings/:id(.:format)
settings#show
                      PUT    /settings/:id(.:format)
settings#update
                      DELETE /settings/:id(.:format)
settings#destroy
我的create.html.erb如下所示:_

<%= form_for @setting  do |f| %>
  <% if @setting.errors.any? %>  
  <div id="errorExplanation">  
    <h2><%= pluralize(@setting.errors.count, "error") %> prohibited this setting from being saved:</h2>  
    <ul>  
    <% @setting.errors.full_messages.each do |msg| %>  
      <li><%= msg %></li>  
    <% end %>  
    </ul>  
  </div>  
  <% end %> 
</br></br>


Id: <%= f.text_field :id %><br>
Name: <%= f.text_field :name %><br>


<%= f.submit "Create" %>&nbsp;&nbsp;
My new.html:-

<h1>New setting</h1>




<%= form_for @setting  do |f| %>
  <% if @setting.errors.any? %>  
  <div id="errorExplanation">  
    <h2><%= pluralize(@setting.errors.count, "error") %> prohibited this setting from being saved:</h2>  
    <ul>  
    <% @setting.errors.full_messages.each do |msg| %>  
      <li><%= msg %></li>  
    <% end %>  
    </ul>  
  </div>  
  <% end %> 
</br></br>


Id: <%= f.text_field :id %><br>
First Name: <%= f.text_field :name %><br>


<%= f.submit "Create" %>&nbsp;&nbsp;

<% end %>




<%= link_to 'Back', settings_path %>
新设置
禁止保存此设置:


Id:
名字:

任何人都可以帮助我。

一个好的开始就是通过以下方式打印您的路线:

rake routes
然后需要在控制器中定义一个show方法:

def show
  ..
end
还有一个观点:

app/views/settings/show.html.erb
使用
resources:settings
他应该识别出有一个显示路径。女巫可能看起来像这样:

settings_path(user.id)
resources:settings
不需要包含两次


我想这和你的
UserController
没有关系。导入部分是
设置控制器
。如果在
/view/user/show.html.erb
上显示设置显示链接,则可能会出现错误?(不是100%确定,需要查看更多代码,
SettingController
会很有趣)。

将表单放入
new.html.erb
而不是
create.html.erb
中,如:

new.html.erb

<%= form_for @setting  do |f| %>

#Your stuff

<% end %>
然后,您的控制器将被激活-

创建操作:

更新:

def create
  if request.setting?
     @setting = Setting.new(params[:setting])
    # other setup for save
    if @setting.save
      flash[:notice] = 'Setting was successfully created.'
      redirect_to @setting
    else
      render :action => 'new'
    end
  end 
end

注意:当你说create是一个post方法时,没有
create.html.erb
这样的东西。此外,您应该在整个代码中使用
@setting
,而不是在控制器的新方法中定义的
@settings

为什么在
路由中定义
资源:settings
两次。rb
?尝试rake路由,看看您有哪些路由available@arieljuod.i已更新question@Mischa这是邮局当我尝试创建时,正如您在路线中看到的,显示路径始终需要一个id,其中应显示(/settings/:id(:format))。因此,请确保始终使用类似于设置路径(user.id)的id访问show页面。请确保您在设置控制器中定义了一个show方法,并且您有一个show视图。您可以指定我必须将设置路径(user.id)放在index.html中的什么位置吗?我想这更一般,您不必这样做。Sry用于混淆。如果您创建了一个设置,您将在这里结束:将_重定向到@settings witch,它是view\setting\show.html.erb,并且它知道@setting对象的id。只需确保有一个show方法和视图本身!那么请告诉我当你收到错误时你在浏览器中的路径。是的,但那不是显示页面!因此,在views/settings/new.html.erb的某个地方必须有一个指向show页面的链接。那个链接需要一个id!!像链接到“显示设置”一样,设置路径(@setting.id)就是一个例子!我试过了,但还是没用。你还没有完全试过。请看我在答复中的说明。就这样做吧。没有
create.html.erb
任何字符,也没有复数。抱歉,刚刚将
@setting=setting.new(params[:settings])
更改为
@setting=setting.new(params[:setting])
。请参阅更新。它现在应该可以工作了。好的,我创建了一个新的html文件new.html.erb,并将带有单数“设置”的代码放在了整个文件中。但仍然没有帮助。请检查并让我知道是否还有其他更改要做