私はアップデートに問題があります。私がフォームを提出すると、パラメータは私に{"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. Powershell経由でWindowsアップデートをプッシュ
- 3. リアルタイムでサーバーからajax経由でアップデートを取得
- 4. 期待通りのbashでSCP経由でIOSをアップデートする
- 5. TortoiseSVNをネットワーク経由でアップデートするには?
- 6. httpプロトコルの代わりにsvn経由でSVNアップデート
- 7. Carthage経由でAlamofire 4.0とSwift 3.0にアップデート
- 8. wp bloginfo( 'admin_email')をPHP経由でアップデートするには?
- 9. サーバー上のアレイ経由で画像をアップロードするには?
- 10. mongoose経由でmongoアレイにアイテムを押し入ります
- 11. iOS 9.3.1にアップデートした後にiTunes経由で.ipaをインストールできない
- 12. VSX 2010パッケージをネットワーク経由でアップデートするか、ローカルで再インストールしますか?
- 13. powershellはアレイ経由でセキュリティグループにipsを追加できません
- 14. インスタンスの後にはJavaScriptを経由してアップデートCKEditorバージョンのCSSがすでに
- 15. Composer経由でアップデートした後にDrupalブロックが見つからない
- 16. xampp(windows-7-x64)経由でperlでシステム()経由で印刷
- 17. クロスサイトアップロードiframe経由で
- 18. テストリアクションネイティブiPhone経由で
- 19. シリアルポート経由でプリンタバッファオーバーフロー
- 20. .net経由でシリアルポート経由でデータを引き出す
- 21. デバッグウィンドウ電話7インターネット経由でVisual Studio経由で
- 22. Mailgun API経由でMailgunライブラリ経由で送信
- 23. HTTPS経由でHTTP経由でクッキーを送信する
- 24. コンストラクタ経由でデータベースに接続し、デストラクタ経由で閉じる?
- 25. Resttemplate経由でスプリングレストサービス経由でファイルを送信
- 26. GPSアップデートがない理由
- 27. ストアドプロシージャSSIS経由で24,000%遅く実行する(SQLエージェントジョブ経由)SSS経由で手動で実行する
- 28. 3G経由のゲームセンター(GameKit)経由でデータを送受信する
- 29. PHP PDO経由のPGSQL経由での接続
- 30. PEAR - CLI経由でインストールする理由
どのように '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
コントローラメソッド全体、あなたのパラメータからのサンプルデータ、およびあなたが望むものを投稿できますか?すべてがうまくいけば起こる? –