【问题标题】:Rails Simple Form Association submission not updatingRails 简单表单关联提交未更新
【发布时间】:2015-10-23 09:57:26
【问题描述】:

我对设置表单的 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"]

【问题讨论】:

  • 你可以在问题中发布控制器代码吗?
  • 添加控制器代码
  • 尝试在char_params 中添加vn_id
  • 在 Rails 控制台中测试时仍然没有得到 vn 和字符之间的链接
  • 您可以将问题中的表单提交时在日志中生成的params 发布吗?

标签: ruby-on-rails forms ruby-on-rails-4 simple-form


【解决方案1】:

问题是你试图允许一个数组用于单一关联


f.association 输入用于您的 belongs_to 关联,那么为什么它允许多条记录?

你甚至可以看到它是如何工作的here

以上方法仅适用于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

...应该可以工作

【讨论】:

    【解决方案2】:

    不知何故,将 CharactersController 中的 vn_id: [] 改回 :vn_id 奏效了。

    【讨论】:

    • 我不知道,可能是因为我在添加 :vn_id 时没有重置本地服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多