2012-03-13 5 views
0

Webアプリケーション用の基本フレームワーク(スタティックページ、ユーザー認証、rspecによるユニット/統合テスト)を作成しました。私はこれを将来のWebアプリケーションの基礎として使用したいと思いますが、githubからクローンを作成した後に名前を変更する方法をセットアップする必要があります。私はここで名前を変更するコードを生成する助けを得ました] 1しかし、私はそれを統合する方法を把握するのに苦労しています。フォーム(モデルなし)を送信してコントローラーにその部分を再生させるのに問題がある

私はもともとrakefileに名前を変更したコードを書いていましたが、今はコントローラー内にあるはずです。残念ながら、私は自分のコードを動作させることができませんでした。ユーザーがアプリの新しい名前を入力できるようにするためのビューがあります。アイデアは、ユーザがフレームワークのレポをクローンし、フレームワークディレクトリに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)))' 

更新:コードをいくつか変更しました。

  1. ルート:追加のポスト '/ナメル' =>
  2. 'ナメルの#作成' Renamerのモデルを作成しました。 Models/renamer.rbは "class Namer"だけで、 "end"です。 (データベースが含まれていないため、「< Base :: ActiveRecord」を削除しました)
  3. 名前を変更するためのレーキファイルを作成しました。ちょうど "renamer.rake"と呼ばれています。

状況はよく見えますが、コントローラからレイクファイルを呼び出す方法を探しています。助言がありますか?

更新2:私のコントローラ用の私の修正されたCreateメソッドです。ここでは、名前変更コードはレーキファイルの代わりにここにあります。

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

あなたのルートルートセクションがそこにあるroutes.rbに貼り付けることはできますか? –

+0

あなたの 'routes.rb'を投稿してください。エラーは何ですか? – maletor

+0

私は実際にエラーが発生していません。私の問題は、アプリケーションコードの名前を変更するために実行されないことです。 –

答えて

0

あなたのルートファイルは、ナメルための「ポスト」のマッチを持っていないように見えます。最も簡単な方法は、このラインをどこかに置くことです。

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

post -methodフォームを作成するform_tagヘルパーのデフォルト、とあなたは、リソースを作成している場合、それはあなたがしたいと思うものだ - あなたは自分のルートがそれのためにそこにあることを確認する必要があります。 Railsは一番下のキャッチオールルート経由でPOSTアクションを送信しない可能性がありますが、ルートの名前が何らかの形で指定されていることを確認する方がはるかに良い方法です。

個人的には、私は可能な限りリソースの多いルートを好みます。 Read up on them here;私はそれがそれの価値があると約束します。

(これは役に立ちません... def create機能のコードが実際に起動しているかどうかを確認できますか?デバッガの行にドロップするか、putsステートメントを参照してください)。

+0

Gotcha。それが助けになりました。ありがとう。 –

+0

優れています。あなたの作成アクションは、その後、動作していますか?私の反応を解決策としてマークして教えてください。 –

2

OK、これはあなたのアプリケーションの名前を変更するコードの正しい場所ですか?

いいえ、ここには入れません。

rake namer:rename APP_NAME=NewAppName 

これは、名前の変更を実行します:私はあなたが考えrakeタスク(libに/タスク/ namer.rake)、としてこれを入れてしまうでしょう。これで私はこのコードを持っています。

+0

合意。これは "rake task"を叫ぶ。 –

+0

OK。ユーザーがnamer \ view.html.erbの[アプリケーションの名前を変更する]ボタンをクリックしたときにレーキを実行させるにはどうすればよいですか? –

+0

名前の変更は1回限りですか?それとも頻繁に起こるのでしょうか? –

関連する問題