提交表格(没有型号)并且无法让控制器发挥其作用

我已经为webapps创建了一个基本框架(一些静态页面,用户身份validation,使用rspec进行单元/集成测试)。 我想将此作为未来webapps的基础,但我需要设置一种方法,在从github克隆它之后重命名它。 我在这里获得了一些生成重命名代码的帮助] 1 ,但我正在努力弄清楚如何集成它。

我最初写的是在rakefile中重命名代码,但现在我想也许它应该在控制器中。 不幸的是,我无法使我的代码工作。 我有一个允许用户输入应用程序新名称的视图。 想法是用户将克隆框架repo,cd到框架目录,启动rails服务器,然后转到他们浏览器上的本地主机以从那里重命名文件。 但是,假设启用它的观点不起作用。

views/namer/new/html.erb 

Rails Framework

'create' %>

我无法让“提交”操作正常工作。 这是我的控制器的样子。

 controllers/namer_controller.rb class NamerController < ApplicationController def index render('new') end def new end def create @appname = Namer.new(params[:appname]) #first, change any instances of the term "framework" to the new name of the app file_names = ['config/environments/test.rb', 'config/environments/production.rb', 'config/environment.rb'] file_names.each do |file_name| text = File.read(file_name) File.open(file_name, "w") { |file| file << text.gsub("Framework", @appname) } end #next,change the root path away from namer#new file_name ='config/routes.rb' text = File.read(file_name) File.open(file_name, "w") { |file| file << text.gsub("namer#new", "pages#home") } flash[:notice] = "Enjoy your app." render('pages/home') end end 

知道我做错了什么吗?

另外,控制器真的是“重命名”代码的最佳位置吗?

编辑:这是我的routes.rb文件。

 Framework::Application.routes.draw do resources :users resources :sessions, :only => [:new, :create, :destroy] match '/signup', :to => 'users#new' match '/signin', :to => 'sessions#new' match '/signout', :to => 'sessions#destroy' match '/contact', :to => 'pages#contact' match '/about', :to => 'pages#about' match '/help', :to => 'pages#help' root :to => "namer#new" match ':controller(/:action(/:id(.:format)))' 

更新:我在几个方面改变了我的代码。

  1. 路线:添加post’/ namer’=>’namer #create’
  2. 创建了一个Renamer模型。 Models / renamer.rb只是“类名”,然后是“结束”。 (我删除了“<Base :: ActiveRecord”,因为没有涉及数据库。)
  3. 为重命名代码创建了一个rake文件。 它只是叫做“renamer.rake”。

事情看起来不错,但我仍在寻找一种从控制器调用rake文件的方法。 有什么建议?

更新2:这是我为我的控制器修改的Create方法。 现在重命名代码在这里而不是在rake文件中。

 def create @appname = Namer.new(params[:appname]) file_names = ['config/environments/test.rb', 'config/environments/production.rb', 'config/environment.rb'] file_names.each do |file_name| text = File.read(file_name) File.open(file_name, "w") { |file| file << text.gsub("Framework", @appname) } flash[:notice] = "Enjoy your app." render('pages/home') end 

你的路线文件没有名字命名的“post”匹配,看起来像。 最简单的方法就是将这条线放在某个地方。

 post '/namer' => 'namer#create' 

form_tag帮助器默认创建一个post method方法,如果你正在创建一个资源,那就是你想要的 – 你只需要确保你的路由就在那里。 Rails可能不会通过底部的catch-all路径发送POST操作,但确保以某种方式命名路由更好。

就个人而言,我尽可能选择资源丰富的路线。 在这里阅读它们 ; 我保证这是值得的。

(如果这没有帮助……你能检查一下你的def create函数中的代码是否实际触发了吗?放入调试器行或puts语句来查找。)

好的,你的问题的第二部分—这是你的代码重命名你的应用程序的正确位置吗?

不,我不会把它放在那里。 我会把它作为rake任务(lib / tasks / namer.rake),你可以:

 rake namer:rename APP_NAME=NewAppName 

这将执行重命名。 这就是我有这个代码的地方。