私はアップデートに問題があります。私がフォームを提出すると、パラメータは私に{"1"=>"1", "4"=>"1"}
のような値のハッシュを与えます。値だけを更新したい。だから、私はキーと値を分離したkeys, values = @period.map { |k,v| [k.to_i, v.to_i] }.transpose
ここでは@period = {"1"=>"1", "4"=>"1"}
です。私は[1,4]
のような値を得る。では、この配列を使ってどのように更新できますか?私が最後の値(4)だけupdate_attributesを使用するとき。配列を使用してフィールドを更新するにはどうすればよいですか?私はレールが新しく、落ち着いてください。アレイ経由でアップデート
答えて
あなたのアプローチは、Railsの規約に従わないため、難しいと感じています。 Railsのやり方は、あなたの人生をはるかに簡単にするでしょう。
TLDR:ネストされた属性を使用し、@institutionという親オブジェクトの周りにフォームを構築する必要があります。あなたは期間モデル、件名モデル、および機関のモデルを持っているように見えます
...より詳細にはhttp://guides.rubyonrails.org/form_helpers.html#building-complex-forms
:これを実装する方法についてのRailsガイドのこの部分を参照してください。期間は科目に属し、おそらく施設に属しているようです。私が間違っているなら、私を訂正してください。
次の方法で、Railsの規約に破壊されるように表示されます。
あなたが編集方法やビューを使用する必要があるときには、showメソッドとビューを使用しています。
form_forを使用できる場合は、form_tagを使用しています。
ビューから直接モデルを呼び出しています。
親の複数の子レコードを処理する際にネストされた属性を使用していません。要約すると
、次の操作を行うためにあなたのアプローチを変更する必要があります。
を一括であなたの期間のデータを更新する責任institutions_controller番号の更新方法を確認します。
あなたの機関のモデルにこれを追加します。あなたのinstitutions_controllerで
accepts_nested_attributes_for :periods
を、例えば、金融機関ののparamsに期間のためのparamsを追加します。
params.require(:institution).permit( :name, # whatever else is there now... periods_attributes: [ :id, :subject_id, :institution_id ] )
あなた機関/ _formを更新次のように表示されます。
<%= form_for @institution do |f| %> <%= f.text_field :name %> <%= fields_for :periods do |p| %> <%= p.hidden_field :institution_id %> <%= p.collection_select :subject_id, @subjects, :id, :name, prompt: true %> <% end %> <%= f.submit %> <% end %>
どれくらいエレガントなのか見てみましょうか?すべての属性の名前が正しく指定されているため、送信時に受信パラメータを検査するときにキーと値が何を意味するのかを推測する必要はありません。
更新このような何かにあなたのinstitutions_controller#編集方法:
def edit @institution = Institution.includes(:periods).find(params[:id]) @subjects = @institution.subjects.all # assumes subjects belong to institution end
あなたinstitutions_controller番号の更新は任意の更新を必要としないことがあり、このようなものになります。
def update @institution = Institution.find(params[:id]) if @institution.update_attributes(institution_params) flash[:success] = "Saved!" redirect_to @institution # or wherever you want to go else @subjects = @institution.subjects.all render :edit end end
これを試してください。 HTH
- 1. PHPアレイ経由ですか?
- 2. リアルタイムでサーバーからajax経由でアップデートを取得
- 3. サーバー上のアレイ経由で画像をアップロードするには?
- 4. mongoose経由でmongoアレイにアイテムを押し入ります
- 5. httpプロトコルの代わりにsvn経由でSVNアップデート
- 6. TortoiseSVNをネットワーク経由でアップデートするには?
- 7. VSX 2010パッケージをネットワーク経由でアップデートするか、ローカルで再インストールしますか?
- 8. iOS 9.3.1にアップデートした後にiTunes経由で.ipaをインストールできない
- 9. インスタンスの後にはJavaScriptを経由してアップデートCKEditorバージョンのCSSがすでに
- 10. xampp(windows-7-x64)経由でperlでシステム()経由で印刷
- 11. GPSアップデートがない理由
- 12. シリアルポート経由でプリンタバッファオーバーフロー
- 13. クロスサイトアップロードiframe経由で
- 14. デバッグウィンドウ電話7インターネット経由でVisual Studio経由で
- 15. HTTPS経由でHTTP経由でクッキーを送信する
- 16. .net経由でシリアルポート経由でデータを引き出す
- 17. コンストラクタ経由でデータベースに接続し、デストラクタ経由で閉じる?
- 18. 3G経由のゲームセンター(GameKit)経由でデータを送受信する
- 19. PEAR - CLI経由でインストールする理由
- 20. GradleでSCP経由でアップロード
- 21. TortoiseSVN(プロキシスクリプト経由)
- 22. PHP経由リモートサーバファイルアップロード
- 23. ビデオストリーミング(TCP経由)
- 24. インターネット経由でのWCFエラー
- 25. C#経由でユーザにアクセス
- 26. アプリケーションプールをWiX経由でリサイクル
- 27. 強制 "www。" .htaccess経由で
- 28. PHP経由でファイルをダウンロード
- 29. Webcam Flash経由でのチャット
- 30. jQuery.post()とajax経由でリダイレクト
どのように 'update_attributes'を使用していますか?そのコードを投稿してください。 – Pavan
更新アクションでは、私は 'Period.where(subject_id::subject_id).update_all(subject_id:values)'を持っています。私は実行中にエラーは発生しませんが、問題は、値が変化していないということです。ログファイルには、 'SQL(1.3ms)UPDATE期間SET期間ject_id = NULL WHERE period.subject_id = NULL'と表示されます – Vikram
コントローラメソッド全体、あなたのパラメータからのサンプルデータ、およびあなたが望むものを投稿できますか?すべてがうまくいけば起こる? –