2017-04-02 19 views
0

申し訳ありませんが、私は私が考案を使用していると私は更新しようとしているRailsは5 Simpleformは、ネストされた属性を更新していない

...これに類似の質問を見てきましたが、まだいくつかの理由のためにそれを把握することはできませんMy UserモデルとCityモデルをネストされたフォームを使用して同時に(登録登録ページを通じて)登録することができます。

データベースにある定義済みの値に基づいてユーザーの都市を更新しています。だから、すべてのユーザーは、リストから住んでいる都市を選択して保存するだけです。

現時点ではフォームは送信されますが、都市は変更されません。

ありがとうございます!

#user.rb 
class User < ApplicationRecord 
    belongs_to :city 
end 

#city.rb 
class City < ApplicationRecord 
    has_many :users 
end 

マイコントローラー:

class UsersController < ApplicationController 
    def index 
    @users = User.all 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

    def update 
    @user = User.find(params[:id]) 

    if @user.update(user_params) 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

    def show 
    @user = User.find(params[:id]) 
    end 

    private 

    def user_params 
    params.require(:user).permit(city_attributes: [:id, :name, :user_id]) 
    end 
end 

そして、私形式:

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> 

     <%= f.simple_fields_for :city do |c| %> 

     <%= c.input :city_id, collection: City.all.order(name: :asc), label_method: :name, value_method: :id, label: "City", include_blank: false, selected: @user.city_id %> 

     <% end %> 
<% end %> 
+0

私の推測では、フォームがあなたのusers_controllerにポストバックしないため、動作しないと思います。あなたは、 'routes.rb'ファイルを特定の方法で上書きして、あなたのコントローラを使用するようにDeviseに指示する必要があります。 – Iceman

+1

ありがとう@Iceman。私は今すぐ私の答えを掲載し、私の問題は分類されています。ネストされた属性はまだ機能しませんが、それは別の時間に戻ってくるものです。 –

+0

あなたはそれがうまくいってくれてうれしいです、多分私は別の問題をいつか調べます。 – Iceman

答えて

2

わかりましたので、私はコメントに基づいて私の問題を整理アイスマンからの応答とajerferからの応答息子。

(ネストされたフォームのdoesntの仕事が残っているが、私の問題は、固定されていることが問題)

アイスマンは工夫が自分のアプリケーションのコントローラで、独自のパラメータを許可して言ったように。そこで、私はルートを変更する代わりに、そこにパラメータを移動しました。

# application_controller.rb 
def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :date_of_birth, :gender, city_attributes: [:id, :name, :user_id]]) 
    end 

同じ問題が発生しました。

def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :date_of_birth, :gender, :city_id]) 
    end 

マイ形式:

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> 

    <%= f.input :city_id, collection: City.all.order(name: :asc), label: "City" %> 

<%= f.button :submit, "Save" %> 
<% end %> 

、今では完全に正常に動作しますので、私がやったことは、実際にネストされたフォームをスクラップし、単にこれに自分のアプリケーションのコントローラを変更して、CITY_ID外部キーをターゲットでした!

-1

これを試してみてください:

def user_params 
    params.require(:user).permit(:city_id) 
end 
関連する問題