2016-05-04 22 views
0

都市のレビュー(yay standard CRUD apps!)でサイトを作成していますが、フォームに@cities_arrayインスタンス変数を使用しているすべての都市が設定されています。 reviews_controllerで私の新しい方法を参照してください。Railsリダイレクト時にフォームが選択されていません

def new 
    @review = Review.new 
    @cities_array = City.cities_alphabetized 
    end 

ユーザーがnew_review_pathを訪れたことが、すべての良いことがありますように、フォームのドロップダウンメニューは都市が移入されます。フォームコード:

<%= f.select :city_id, options_for_select(@cities_array) %> 

同じページに、別のフォームがあります。このフォームでは、ユーザーがドロップダウンリストにない場合は別のフォームを追加できます。名前を入力すると、Google Geocoderに送信されたAJAXリクエストが作成された都市メソッドにルーティングされ、新しい都市が作成されます。作成方法:

def create 
    latitude = params[:latitude].to_f.round(4) 
    longitude = params[:longitude].to_f.round(4) 
    name = params[:name] 
    city = City.new(name: name, latitude: latitude, longitude: longitude) 
    if city.save 
     flash[:success] = "City created! Please refresh." 
     redirect_to new_review_path 
    else 
     flash[:notice] = "Your city couldn't be created." 
     redirect_to new_review_path 
    end 
    end 

新しい都市が保存されると、ユーザーはレビューページにリダイレクトされます。しかし、ユーザーがブラウザを手動でリフレッシュしない限り、都市のドロップダウンを含むフォームは更新されません。

リダイレクト後にこのフォームがリフレッシュされないのはなぜですか?私はチェックし、@ city_arrayが新しい都市をインクルードするようにインクリメントしていますが、なぜユーザーは新しい都市がフォームのドロップダウンに表示されるように更新する必要がありますか?

明らかに私はそこに何かを理解していません!ここで

は便利だ場合のログです:

Started POST "/cities" for ::1 at 2016-05-03 21:11:49 -0400 
Processing by CitiesController#create as HTML 
    Parameters: {"name"=>"Dong Hoi", "latitude"=>"21.0128173", "longitude"=>"107.45755380000003"} 
    (0.2ms) BEGIN 
    SQL (0.6ms) INSERT INTO "cities" ("name", "latitude", "longitude", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "Dong Hoi"], ["latitude", 21.0128], ["longitude", 107.4576], ["created_at", "2016-05-04 01:11:50.021635"], ["updated_at", "2016-05-04 01:11:50.021635"]] 
    (0.6ms) COMMIT 
Redirected to http://localhost:3000/reviews/new 
Completed 302 Found in 33ms (ActiveRecord: 6.3ms) 


Started GET "/reviews/new" for ::1 at 2016-05-03 21:11:50 -0400 
Processing by ReviewsController#new as HTML 
    User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]] 
    City Load (1.1ms) SELECT "cities".* FROM "cities" 
    Rendered reviews/new.html.erb within layouts/application (11.2ms) 
Completed 200 OK in 442ms (Views: 176.8ms | ActiveRecord: 5.3ms) 
+0

まったく同じことはできますか?私のリダイレクトが機能している、私はそれが問題だとは思わない。なぜ私のフォームドロップダウンが更新されていないのか分かりません。人々が見ることができるように私の質問にログを投稿する。 – OnesZeroesTwos

+0

私はそれをajaxと呼ぶ必要があると思います。より良い解決策があります – 7urkm3n

+0

Railsフォームヘルパーを使用する代わりにフォームにAJAXを取り込むことを意味しますか? – OnesZeroesTwos

答えて

0

私は何が必要THINKフォームが送信された後に、選択した値を示すことです。次のように試してみてください:

<%= f.select :city_id, options_for_select(@cities_array, selected: @review.city_id) %> 

それがうまくいくかどうか教えてください。

+0

残念ながら。この時点では、ユーザーがレビューを書く都市を選択していないため、レビューは都市に関連付けられていません。 – OnesZeroesTwos

0

はい、私はAjaxingを意味していました。また、この1つを試してみることができますし、私に知らせてください:

if city.save 
    flash[:success] = "City created! Please refresh." 
    @cities_array = City.cities_alphabetized 
    render :new 
else 
    flash[:notice] = "Your city couldn't be created." 
    redirect_to new_review_path 
end 
関連する問題