使用简单表单创建新模型对象时,我需要将一个对象的id传递给新对象,因为它依赖于其URL的id。路由是:
resources :coins do
resources :questions
end
我试图使用隐藏字段标记执行此操作,但它无法正常工作。 ID未传递,因此新对象不会保存。
<%= simple_form_for @question, url: coin_questions_path(@coin.id) do |f| %>
<%= f.input :ques_num %>
<%= f.input :content %>
<%= hidden_field_tag(:coin_id, @coin.id) %>
<%= f.button :submit, 'Submit' %>
<% end %>
在此之前,我使用简单形式的collection_select手动输入ID并且它有效,但我需要它自动发生。是否有更好的方法来做我想要的事情?
问题模型:
class QuestionsController < ApplicationController
before_action :find_question, only: [:show, :edit, :update, :destroy ]
before_action :find_coin
before_action :authenticate_user!, except: [:index, :show]
def index
@questions = Question.where(coin_id: @coin.id).order("created_at DESC")
end
def show
end
def new
@coin
@question = current_user.questions.build
end
def create
@question = current_user.questions.build(question_params)
if @question.save
redirect_to coin_question_path(@coin.id, @question.id)
else
render 'new'
end
end
.
.
.
private
def find_question
@question = Question.find(params[:id])
end
def find_coin
@coin = Coin.find(params[:coin_id])
end
def question_params
params.require(:question).permit(:content, :ques_num, :coin_id)
end
end
答案 0 :(得分:1)
您可以轻松地将hidden_field
与值read more
例如:
<%= f.hidden_field :coin_id, value: @coin.id %>
然后该值将在创建时的params[:question][:coin_id]
中,因此其余部分应该像现在一样工作。 :)
答案 1 :(得分:0)
<%= hidden_field_tag(:coin_id, @coin.id) %>
将生成一个名称为&#34; coin_id&#34 ;;的字段你想要&#34;问题[coin_id]&#34;
您应该将此值分配给控制器中的对象。 @question.coin_id = @coin.id
,或@question = Question.new(:user => current_user, :coin => @coin)
或@question = current_user.questions.new(:coin => @coin)
<%= f.input :coin_id, :as => :hidden %>