尝试将参数从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
应该注意保存吗?
答案 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
的值。