2016-08-23 5 views
1

私はレールとWeb開発を初めて利用しています。 私は、サイト用の自動配置システムを構築しようとしています。私はsite_nameモデルの名前フィールドを取得する私のホームページにフォームがあり、私はこの名前(およびsite_nameインスタンス)を展開する別のコントローラに渡そうとしています。しかし、私は正しく名前を渡すことができませんでした。 fromのインスタンス変数を別のコントローラに渡すにはどうすればよいですか?Ruby on Rails:フォームを介してコントローラーから別のコントローラーにインスタンス変数を渡す方法

これらは私がFYI

home.html.erb(アクションのインスタンスを含んでいる)

<div class="center jumbotron"> 
    <h1>Welcome to the Sample App</h1> 

    <div class="input-group"> 
    <%= form_for @site_name, url: {action: "instantiate", controller: "script_execute"}, html: {method: "get"} do |f| %> 

    <%= f.label :name %> 
    <%= f.text_field :name, class: 'form-control' %> 

    <%= f.submit "Create my account", class: "btn btn-primary" %> 
    <% end %> 
    </div> 
    <%= link_to "Sign up now!", instantiate_path, class: "btn btn-lg btn-primary" %> 
</div> 

script_execute_controller.rb

class ScriptExecuteController < ApplicationController 

    def instantiate 
    site_name = @site_name.name 
    @hostname = 'myhostname' 
    @username = 'myusername' 
    @password = 'mypassword' 
    @cmd = "yes #{site_name} | ./denemescr.sh" 
    begin 
     ssh = Net::SSH.start(@hostname, @username, :password => @password) 
     res = ssh.exec!(@cmd) 
     ssh.close 
     puts res 
    end 
    redirect_to root_url 
    end 
end 

ためstatic_pages_controller.rb(コントローラを使用するファイルですホームページ)

class StaticPagesController < ApplicationController 
    def home 
    @site_name = SiteName.new 
    end 
end 
+1

リンケージは実際にはhttpフォームのパラメータです。フォームのIDと名前は、コントローラが正しく認識できるようにフォーマットする必要があります。あなたのログファイルを見て、どのパラメータが使用されているのかを見てみましょう。 – jaydel

+0

フォームがパラメータを正しく取得し、インスタンス変数を正しく更新することがわかります。しかし、コントローラ内のインスタンス化アクションは、何とかその名前にアクセスできません。 POSTアクションは名前で正しく行われますが、名前は使用できません。コントローラーが使用しようとしている@site_nameインスタンスはnilであり、更新/初期化されていないことを示しています。 – btezergil

答えて

0

GETを使用してフォームを投稿する理由は何ですか?それを投稿に変更し、投稿が送信されているアクションでparams [:name]を使用して名前を取得します。最初にインスタンス変数をインスタンス化し、実際にはメソッドにインスタンス化します。

+0

私はWeb開発の初心者だと言っていたので、実際にはGET/POSTなどとの差異や使い方の違いを知らない。フォームはまた、POSTを使用しようとしました。そのためにroutes.rbにpostアクションを追加しました。私はあなたが提案したものを試してみるでしょう。ありがとう! – btezergil

関連する問題