私はデータをリストし、新しいレコードを(部分的に)作成できるビューを持っています。問題は、フォームがインデックスアクションの下に存在するため、リダイレクト時にユーザー入力が無効な場合、フォームのデータを失うことです。Rails 4リダイレクト時にフォームデータを保存する方法
私はデータを保持したいので、ユーザーはそれをもう一度入力する必要はありません。
コントローラー:
def index
@instance = Instance.new
end
def create
w = current_user.workspaces.find_by_id(params[:"..."]
if w.present?
@instance = current_user.workspaces.find_by_id([:"..."]).instances.create(...)
[:info] = "Please check your email to activate your account."
redirect_to root_url
else
flash[:info] = "Please check your data"
redirect_to root_url
end
end
index.html.haml
= render :partial => 'partial1'
partial1.html.haml
= form_for @instance , url: {action: "create"} do |f|
私は 'レンダリング' 形式のデータを保持しますが、やっていることを知っています:
def create
if something
...
else
flash[:info] = "Please check your data"
render :index
end
end
01 {アクション: "作成"}私は、フォーム内のエラー
最初の引数がnilを含んでいたり
=のform_for @instance、URL空にすることはできません取得
| fを行います|
どうすれば修正できますか? 私はすでにindexアクションに書かれたコードを、繰り返すことになるため、この
def create
...
flash[:info] = "Please check your data"
@instance = Instance.create
render :index
のように、アクションを作成するに@instanceを初期化する必要はありません。
それをラップする:
を私は複雑なコントローラと、部分的なフォームを持っている複雑なインデックスを眺めることができます。 Iレンダリングできません:すべてのインデックスのインスタンス変数をロードする必要があるため、作成アクションのインデックス。 データが正しくない場合、ネストされたフォームがあるので、@instance変数を作成できません。私が作成したアクションに@instanceを初期化する必要はありません
を[ :instance])を使用すると、あなたは既に変数を持っていて、 'render:index'を使うとエラーが消えてしまいます。 – fanta
'@instance = Instance.new'は、フォームのユーザ入力をインスタンス化するためだけに' @ instance'をインスタンス化します。オブジェクトを作成していません。ですから、あなたの 'コントローラ'では、その情報、つまりparamsを取得し、 'Instance.create'と' save'を使用しなければならないので、コードを繰り返す必要はありません。 – mrvncaragay
ユーザの入力が無効なときにデータを保持したい場合は、 'redirect_to root_url'の代わりに' render index'を使用してください – mrvncaragay