【问题标题】:comments not saving post_id评论不保存 post_id
【发布时间】:2010-09-30 16:56:30
【问题描述】:

我遇到了一个小(新手)问题。

我有 2 个模型:问题和评论。

评论架构:question_id、user_id、rating、cmets

在“显示”视图中,我集成了以下表单(formtastic):

  - semantic_form_for @question.reviews.build do |f|
    = f.error_messages
    = f.input :rating 
    = f.input :comments
    = f.buttons

我的评论控制器的创建操作如下所示:

  def create
    @review = Review.new(params[:review])
    @review.user_id = current_user.id

    if @review.save
      flash[:notice] = "Successfully created review."
      redirect_to(@review.question)
    else
      redirect_to(@review.question)
    end
  end

但是,现在它似乎根本没有将问题 ID 保存在 question_id 字段中。它确实很好地保存了 user_id。

有人知道我做错了什么吗?如果您需要日志,请告诉我!提前致谢

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 blogs formtastic


    【解决方案1】:

    您需要为表单上的问题 ID 添加一个隐藏字段。像

    f.hidden_field :question_id
    

    更具体地说,user_id 被保存,因为您在控制器中分配它。您需要将表单中的 question_id 传递给控制器​​才能保存。

    【讨论】:

    • 谢谢,我认为这可能是一个解决方案。但是,用户不能简单地改变字段的值,从而改变另一个问题的值吗?我认为将它添加到控制器中会更安全吗?或者这不是因素?再次感谢!
    • 你是对的,你不应该相信任何你不想被用户潜在改变的东西到隐藏字段。您应该始终进行某种权限检查,以查看用户是否能够执行他们正在尝试执行的操作。理想情况下,该责任被封装在授权模块(即 cancan)中,而不是试图在控制器操作中强制执行它。这意味着您应该有一个 before 过滤器,如果他们没有权限 如果他们没有权限,@review.save 应该会失败。
    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多