Rails 4没有用这种方法保存到数据库中?

时间:2016-01-23 19:21:26

标签: ruby-on-rails ruby-on-rails-4 activerecord

尝试将参数从url保存到数据库中。

我有一个链接:

if ( sccount % 2 !== 0 ) 

链接转到表单页面:

- @kits.each do |kit|
  = link_to 'Submit Video', new_challenge_path(kit: kit)
  #this will append a new parameter into the url

在我的控制器中,我有这个:

= simple_form_for @challenge, html: { class: "form-horizontal" } do |f|
  = f.input :video_title
  = f.input :video_url
  = f.input :video_desc, as: :text
  = f.button :submit, "Upload video"

套件与挑战之间的关联

def create
  @challenge = Challenge.new(challenge_params)
  @challenge.kit_id = params[:kit]

  respond_to do |format|
    if @challenge.save
      format.html { redirect_to @challenge, notice: 'Challenge was successfully created.' }
      format.json { render :show, status: :created, location: @challenge }
    else
      format.html { render :new }
      format.json { render json: @challenge.errors, status: :unprocessable_entity }
    end
  end
end

private
  # Use callbacks to share common setup or constraints between actions.
  def set_challenge
    @challenge = Challenge.find(params[:id])
  end

  # Never trust parameters from the scary internet, only allow the white list through.
  def challenge_params
    params.require(:challenge).permit(:video_title, :video_url, :video_desc, :kit_id)
  end

参数不会保存到class Challenge < ActiveRecord::Base belongs_to :kit, counter_cache: true end class Kit < ActiveRecord::Base has_many :challenges end 。不是这样的::kit_id应该注意保存吗?

1 个答案:

答案 0 :(得分:1)

你在控制器中执行kit_id赋值是正确的,而不是在表单中,因为在表单中这样做(即使通过使用隐藏字段)也不安全,因为更改hidden_​​field的值只是检查页面元素的问题。

你做错了什么,我认为params[:kit]只是nil

您可能希望使用params[:kit_id]

如果这样做无效,请将binding.pry放在此处:

  # ... code omitted
  @challenge.kit_id = params[:kit]
  binding.pry
  # ... code omitted

并检查已打开控制台中params的值。