簡體   English   中英

Rails 簡單表單關聯提交未更新

[英]Rails Simple Form Association submission not updating

我在設置提交后不更新值的表單的 has_many 關系方面存在問題。

例子

提交新字符后,vn_id 不會更新,並且在 Rails 控制台中,當我嘗試檢查 Vn 中的字符時,它返回空。

我正在嘗試為屬於 Vn 的字符設置一個表單,該表單將通過關聯鏈接,但在提交時,它未鏈接到 Vn。

class Character < ActiveRecord::Base
    validates :name, :presence => true
    validates :summary, :presence => true
    belongs_to :vn
end

class Vn < ActiveRecord::Base
  has_many :characters
  validates :name, presence: true
  accepts_nested_attributes_for :characters
end

創建新角色的表格

<%= simple_form_for @character do |f| %>
      <div class="col-lg-12">
        <%= f.input :summary,input_html: {style: "height:150px;"} %>
    </div>
      <div class="col-lg-12">
        <%= f.association :vn, as: :check_boxes %>
    </div>
      <%= f.button :submit , class: "btn btn-primary" %>
    <% end %>

控制器

class CharactersController < ApplicationController

    def show
        @character = Character.find(params[:id])
    end

    def new
        @character = Character.new
    end

    def create  
        @character = Character.new(char_params)  
        if @character.save

        else
            render :action=>"new"
        end

    end

    private
        def char_params
        params.require(:character).permit(:name, :summary,:voiceactor,:vn_name,vn_id: [])
    end

end

class VnsController < ApplicationController

    def show
        @vn = Vn.find(params[:id])
    end

    def new
        @vn = Vn.new
    end

    def create  
        @vn = Vn.new(vn_params)  
        if @vn.save

        else
            render :action=>"new"
        end

    end

    private
        def vn_params
    def vn_params
        params.require(:vn).permit(:name, :summary,:genre,:developer,:rating,vn_id: [])
    end

    end

end

提交未經許可的 vn_id

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"O2s6GVs77GGUMC5u3eZ9ebv/0l5u0MwP44yS8WGCQnjgwSgHfkbCmhEOUo6WKIMSMo5IfDuNYtMzyphnT/5cwQ==", "character"=>{"name"=>"2222", "voiceactor"=>"111", "summary"=>"one two tthee", "vn_id"=>"32"}, "commit"=>"Create Character"}
Unpermitted parameter: vn_id
   (0.1ms)  begin transaction
  SQL (0.6ms)  INSERT INTO "characters" ("name", "summary", "voiceactor", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?)  [["name", "2222"], ["summary", "one two tthee"], ["voiceactor", "111"], ["created_at", "2015-10-23 10:34:00.285447"], ["updated_at", "2015-10-23 10:34:00.285447"]

不知何故,將vn_id: []改回:vn_id有效。

問題是您試圖允許一個數組用於單一關聯


f.association輸入用於您的belongs_to關聯,那么為什么它允許多條記錄?

你甚至可以在這里看到它是如何工作的:

在此處輸入圖片說明

以上只是has_many方法

簡而言之,它們不存在於belongs_to


因此,當您調用f.association :vn ,您正在填充一個屬性vn_id ,然后可以將其關聯到您的數據庫中。

您唯一擁有vn_ids是您使用了has_many等。

這意味着...

def character_params
    params.require(:character).permit(:vn_id) 
end

f.association :vn

... 應該管用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM