ruby-on-rails - Rails 4 - 无法连接到 rails 4 上的数据库表

标签 ruby-on-rails ruby sqlite ruby-on-rails-4

我正在学习如何使用嵌套属性的教程,我正在进行调查,但是出现了问题,因为我无法在问题表中插入任何数据

这就是我所做的:

问题模型

class Question < ActiveRecord::Base
    belongs_to :survey
    has_many :answers, dependent: :destroy
end

调查模型
class Survey < ActiveRecord::Base
    has_many :questions, dependent: :destroy
    accepts_nested_attributes_for :questions , :reject_if => lambda { |a| a[:content].blank? }
end

意见/调查/_form.erb
<%= form_for(@survey) do |f| %>


 <div class="field">
  <%= f.label :name %><br>
  <%= f.text_field :name %>
 </div>



  <%= f.fields_for :questions do |ff| %>
  <div class="field">
  <%= ff.label :content , "question"%><br>
  <%= ff.text_field :content %>
  </div>
  <% end %> 

<div class="actions">
  <%= f.submit %>
 </div>

<% end %>

调查 Controller
# GET /surveys/new
  def new
@survey = Survey.new
3.times { @survey.questions.new }
end

现在,当我单击提交时,仅保存调查名称,但没有问题!
像这样 :
2.1.1 :023 > Question.all
Question Load (0.3ms)  SELECT "questions".* FROM "questions"
=> #<ActiveRecord::Relation []>

创建 Action
# POST /surveys
# POST /surveys.json
def create
@survey = Survey.new(survey_params)

respond_to do |format|
  if @survey.save
    format.html { redirect_to @survey, notice: 'Survey was successfully created.' }
    format.json { render action: 'show', status: :created, location: @survey }
  else
    format.html { render action: 'new' }
    format.json { render json: @survey.errors, status: :unprocessable_entity }
  end
end
end
 private
# Use callbacks to share common setup or constraints between actions.
def set_survey
  @survey = Survey.find(params[:id])
end

# Never trust parameters from the scary internet, only allow the white list through.
def survey_params
  params.require(:survey).permit(:name)
end
end

我添加了另一个模型 [答案]
class Answer < ActiveRecord::Base
  belongs_to :question
end

将问题模型更改为此
class Question < ActiveRecord::Base
belongs_to :survey
has_many :answers, dependent: :destroy
accepts_nested_attributes_for :answers, :reject_if => lambda { |a| a[:content].blank? }, allow_destroy: true
end

我将调查更改为
# GET /surveys/new
def new
@survey = Survey.new
1.times do
question = @ survey.questions.build
2.times { question.answers.build }
end
end 

现在与答案相同的先前问题
我应该如何处理强参数

应该是这样的
def survey_params
  params.require(:survey).permit(:name, answers_attributes: [:content]) 
end

最佳答案

听起来你没有 questions_attributes列在调查的允许参数中。

确保您的 survey_params包括这样的问题属性:

private

def survey_params
  params.require(:survey).permit(:name, questions_attributes: [:content]) 
end

如果您有其他调查属性或问题属性,您也需要在此处允许它们。

Strong parameters with nested attributes documentation

关于ruby-on-rails - Rails 4 - 无法连接到 rails 4 上的数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23035840/

相关文章:

ruby - 在 Sinatra 中处理 POSTDATA

php - 是否有适用于PHP或Ruby的网络搜寻器库?

ruby 性能 : define method with define_method or eval

sql - 在sqlite中连接具有不同列名但相同值的表

ruby-on-rails - 将分页 : How change default page in links

css - PaperClip ruby​​ on rails 上传时图像大小不一致

ruby-on-rails - 在 Rails "each"中排除第一个(或最后一个)

android - 从 LIMIT 1 错误中删除

android - 如何根据另一行的更改更新一行?

ruby-on-rails - ActionMailer 在开发中不发送邮件