我正在制作一个小型轨道引擎,我这样安装:
mount BasicApp::Engine => "/app"
Run Code Online (Sandbox Code Playgroud)
使用这个答案,我已经验证了引擎中的所有路由都应该是:
但是 - 当我(在引擎内)链接到命名路由(在引擎内定义)时,我收到此错误
undefined local variable or method `new_post_path' for #<#<Class:0x000000065e0c08>:0x000000065d71d0>
Run Code Online (Sandbox Code Playgroud)
运行"rake route"清楚地验证"new_post"应该是一个命名路径,所以我不知道为什么Rails(3.1.0)无法解决它.欢迎任何帮助
我的config/route.rb(对于引擎)看起来像这样
BasicApp::Engine.routes.draw do
resources :posts, :path => '' do
resources :post_comments
resources :post_images
end
end
Run Code Online (Sandbox Code Playgroud)
我应该补充说它是和孤立的引擎.但是,像main_app.root_path这样的路径工作正常 - 而root_path却没有
mount ruby-on-rails named-routing rails-engines ruby-on-rails-3
我试图在Rails中创建一个简单的搜索表单,但我想我错过了一些东西.
我有一个命名的搜索路线:
map.search ":first_name/:last_name", :controller => "home", :action => "search"
Run Code Online (Sandbox Code Playgroud)
我正在尝试在我的搜索表单中使用它:
<% form_tag(search_path, :method => 'get') do %>
<%= text_field_tag(:first_name) %>
<%= text_field_tag(:last_name) %>
<%= submit_tag("Search") %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但是当我加载搜索表单时,我得到一个ActionController :: RoutingError:
search_url无法从{:action =>"search",:controller =>"home"}生成 - 您可能有不明确的路线,或者您可能需要为此路线提供其他参数.content_url具有以下必需参数:[:first_name,:last_name] - 它们是否都满足?
我错过了什么?我认为我的表单中定义的字段会自动与我的路由参数相关联.: - /
更新:
我知道search_path是在现在显示表单之前生成的,因此无法更新.后见之明显而易见!
我改变了路线:
map.search 'search', :controller => "home", :action => "search"
map.name ':first_name/:last_name', :controller => "home", :action => "name"
Run Code Online (Sandbox Code Playgroud)
现在这个search动作就是:
def search
redirect_to name_path(params)
end
Run Code Online (Sandbox Code Playgroud)
这一切都有效!这里的主要目标是通过搜索结果从名为route 的名称获取该URL .多谢你们!
我有一个名为profile的命名路由,我希望能够以json的身份访问它.但是当我查看我的rake路由输出时,我发现缺少(.:格式).如何将其添加到命名路线?
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
profile /:username {:action=>"show", :controller=>"users"}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
所以我得到了一个'No route matches'错误,并且对Rails 3(以及一般的Rails)不熟悉,我真的不知道问题是什么.以下是相关路线:
resources :users
#...
match 'reset_password(/:reset_password_code)' => 'users#reset_password', :as => :reset_password, :via => :get
match 'reset_password' => 'users#reset_password_submit', :as => :reset_password, :via => :post
Run Code Online (Sandbox Code Playgroud)
GET方法工作正常.当在get页面上生成的表单POST时,我收到路由错误,就像这样开始.
<%= form_for @user, :url => reset_password_url do |f| %>
Run Code Online (Sandbox Code Playgroud)
它看起来像它的发布到正确的位置,如使用"reset_password_url",它的发布到它生成的URL和URL看起来应该......人有什么想法?
UPDATE