我已经为webapps创建了一个基本框架(一些静态页面,用户身份验证,使用rspec进行单元/集成测试)。我想将此作为未来webapps的基础,但我需要设置一种方法,在从github克隆它之后重命名它。我在这里帮助生成了重命名代码] 1,但我很难弄清楚如何整合它。
我最初写的是在rakefile中重命名代码,但现在我想也许它应该在控制器中。不幸的是,我无法使我的代码工作。我有一个允许用户输入应用程序新名称的视图。想法是用户将克隆框架repo,cd到框架目录,启动rails服务器,然后转到他们浏览器上的本地主机以从那里重命名文件。但是,假设启用它的观点不起作用。
views/namer/new/html.erb
<h1>Rails Framework</h1>
<%= form_tag "/namer" do %>
<%= text_field_tag "appname" %>
<%= submit_tag "Name Your App" , :action => 'create' %>
<% end %>
我无法让“提交”操作正常工作。这是我的控制器的样子。
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)))'
更新:我在几个方面改变了我的代码。
事情看起来不错,但我仍在寻找一种从控制器调用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
答案 0 :(得分:2)
好的,问题的第二部分---这是您的代码重命名应用程序的正确位置吗?
不,我不会把它放在那里。我会把它作为rake任务(lib / tasks / namer.rake),你可以:rake namer:rename APP_NAME=NewAppName
这将执行重命名。这就是我有这个代码的地方。
答案 1 :(得分:0)
你的路线文件没有名字命名的“帖子”匹配,看起来像。最简单的方法就是把这条线放在某个地方。
post '/namer' => 'namer#create'
form_tag
帮助器默认创建post
- 方法表单,如果您正在创建资源,那就是您想要的 - 您只需要确保您的路由是它。 Rails可能不会通过底部的catch-all路径发送POST操作,但更好的做法是确保以某种方式命名路由。
就个人而言,我尽可能选择资源丰富的路线。 Read up on them here;我保证这是值得的。
(如果这没有帮助......你能检查def create
函数中的代码是否实际触发吗?请调试调试器行或puts
语句以查找。)