2013-03-12 45 views
0

我是新来rails.I我得到在落实创建操作以下错误..路由错误而实施的轨道创造3.2

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 

我的routes.rb文件如下: -

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 

我耙途径有以下几点: -

 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; 

我的错误日志: -

Started GET "/settings/new" for 127.0.0.1 at 2013-03-12 18:57:09 +0530 
Processing by SettingsController#new as HTML 
    Rendered settings/new.html.erb within layouts/application (170.2ms) 
Completed 500 Internal Server Error in 1112ms 

ActionController::RoutingError (No route matches {:action=>"show", :controller=> 
"settings", :format=>nil}): 
    app/views/settings/new.html.erb:7:in `_app_views_settings_new_html_erb__979995 
802_23360592' 
    app/controllers/settings_controller.rb:29:in `new' 


    Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.1 
1/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within resc 
ues/layout (0.0ms) 

我的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 %> 

任何人都可以请帮助我。

+0

为什么在'routes.rb'中两次定义'resources:settings'? – Baldrick 2013-03-12 12:16:10

+0

尝试耙路线,看看你有什么路线可用 – arieljuod 2013-03-12 12:17:46

+0

@ arieljuod.i已更新问题 – Catmandu 2013-03-12 12:31:50

回答

0

一个很好的起点总是通过打印出你的路线:

rake routes 

然后,你需要定义控制器中的show方法:

def show 
    .. 
end 

和一个视图:

app/views/settings/show.html.erb 

随着resources :settings他应该认识到有一个演出路径。女巫可能是这样的:

settings_path(user.id) 

resources :settings不需要包括两次。我想这与UserController无关。导入部分是SettingController。如果您在/view/user/show.html.erb上显示SettingsShow链接,该错误可能会出现? (不是100%肯定的,需要看到更多的代码,SettingController会互相影响)。

+0

我已更新他的问题 – Catmandu 2013-03-12 12:31:23

+0

正如你可以看到你的路线显示路径始终需要显示一个id(/settings/:id(.:format))。因此,请务必使用像settings_path(user.id)这样的ID访问show页面。并确保你已经在你的设置控制器中定义了一个show方法,并且你有一个show view。 – 2013-03-12 12:34:23

+0

你可以指定我必须将settings_path(user.id)放在index.html中吗? – Catmandu 2013-03-12 12:39:04

0

把你的形式new.html.erb,而不是像create.html.erb

new.html。ERB

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

#Your stuff 

<% end %> 

你的新动作,然后是:

新动作

def new 
@setting = Setting.new 
end 

你的控制器则是 -

创建行动:

UPDATE:

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.html.erb当你说是创建一个POST方法。您也应该在整个代码中使用@setting,而不是@settings,这是它在控制器的新方法中定义的。

+0

我试过了,但仍然没有帮助 – Catmandu 2013-03-12 12:54:45

+0

你还没有完全尝试过,看到我的笔记在答复中,只是这样做,没有'create.html.erb'什么也没有复数 – 2013-03-12 12:55:47

+0

对不起,刚刚更改'@setting = Setting.new(params [:settings])'到'@setting = Setting.new(params [:setting])'看到更新,它现在就可以工作。 – 2013-03-12 12:58:11