私はレールと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
リンケージは実際にはhttpフォームのパラメータです。フォームのIDと名前は、コントローラが正しく認識できるようにフォーマットする必要があります。あなたのログファイルを見て、どのパラメータが使用されているのかを見てみましょう。 – jaydel
フォームがパラメータを正しく取得し、インスタンス変数を正しく更新することがわかります。しかし、コントローラ内のインスタンス化アクションは、何とかその名前にアクセスできません。 POSTアクションは名前で正しく行われますが、名前は使用できません。コントローラーが使用しようとしている@site_nameインスタンスはnilであり、更新/初期化されていないことを示しています。 – btezergil