Ruby on rails 在rails 3.2中实现创建时发生路由错误
我是rails新手。我在尝试实现创建操作时遇到以下错误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
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" %>
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" %>
<% 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,并将带有单数“设置”的代码放在了整个文件中。但仍然没有帮助。请检查并让我知道是否还有其他更改要做