【问题标题】:How to update a boolean value with mongoid and rails?如何使用 mongoid 和 rails 更新布尔值?
【发布时间】:2014-09-10 02:31:33
【问题描述】:

我已经从以前的帖子中将“已发布”的初步布尔值设置为“假”,但在此预览屏幕中,我希望允许用户通过单击来将此值更新为“真”这篇文章发表了,但我遇到了困难。

查看 - preview.html.erb

<div class="preview clearfix">
        <%= form_for @job, url: '/jobs/publish/' do |f| %>
        <%= f.hidden_field :publish, :value => true %>

        <span><i class="glyphicon glyphicon-exclamation-sign"></i> Review your job post! If approved, submit it, or cancel and try again.</span>

        <%= f.submit "Post Job", :class => 'btn btn-default btn-sm' %>
        <a href="/jobs/new" class="btn" style="margin-top:3px;">Cancel</a>

        <% end %>
</div>

CONTROLLER - jobs_controller.rb

class JobsController < ApplicationController
def index
    @jobs = Job.all #where(publish: true)
end

def show
    @job = Job.find(params[:id])
end

def new
end

def preview
    @job = Job.find(params[:id])
end

def create
    job = Job.new
    job.job_title = params[:job][:job_title]
    job.job_location = params[:job][:job_location]
    job.job_description = params[:job][:job_description]
    job.job_responsibilities = params[:job][:job_responsibilities]
    job.job_requirements = params[:job][:job_requirements]
    job.specialties = params[:job][:specialties]
    job.job_level = params[:job][:job_level]
    job.how_to_apply = params[:job][:how_to_apply]
    job.company = params[:job][:company]
    job.company_description = params[:job][:company_description]
    job.company_website = params[:job][:company_website]
    job.avatar = params[:job][:avatar]
    job.agree = params[:job][:agree]
    job.publish = false
    job.save!
    redirect_to '/jobs/preview/' + job.id
end

def update
    job = Job.find(params[:id])  ## Using "find"
    job.publish = true
    job.save!
    redirect_to '/jobs'
end

end

路线

  post 'jobs/publish/' => 'jobs#update'

模型 - job.rb

class Job
include Mongoid::Document
mount_uploader :avatar, AvatarUploader

field :job_title, type: String
field :job_location, type: String
field :job_description, type: String
field :job_responsibilities, type: String
field :job_requirements, type: String
field :specialties, type: String
field :job_level, type: String

field :how_to_apply, type: String

field :company, type: String
field :company_description, type: String
field :company_website, type: String

field :agree, type: Boolean

field :publish, type: Boolean

end

日志

由 GridfsController#avatar 处理为 JPEG 参数:{"id"=>"53c985c36d7572b6cd000000", "filename"=>"cuben-rustic"} MOPED:127.0.0.1:27017 QUERY 数据库=ffos_development 集合=作业选择器={"_id"=>BSON::ObjectId('53c985c36d7572b6cd000000')} 标志=[] 限制=0 跳过=0 批处理大小=无字段=无运行时: 2.8140ms MOPED: 127.0.0.1:27017 QUERY 数据库=ffos_development 集合=fs.files 选择器={"$query"=>{"filename"=>"uploads/job/avatar/53c985c36d7572b6cd000000/cuben-rustic.jpg"}, "$ orderby"=>{"uploadDate"=>-1}} flags=[] limit=-1 skip=0 batch_size=nil fields=nil 运行时间:0.4260ms MOPED:127.0.0.1:27017 COMMAND 数据库=ffos_development 命令={:count=>"fs.chunks", :query=>{"files_id"=>BSON::ObjectId('53c985c36d7572b6cd020000')}} 运行时间:0.3460ms MOPED: 127.0.0.1:27017 QUERY 数据库=ffos_development 集合=fs.chunks 选择器={"$query"=>{"files_id"=>BSON::ObjectId('53c985c36d7572b6cd020000'), "n"=>{"$lt "=>7, "$gte"=>0}}, "$orderby"=>{"n"=>1}} flags=[] limit=0 skip=0 batch_size=nil fields=nil 运行时间:8.0450ms MOPED:127.0.0.1:27017 GET_MORE 数据库=ffos_development 集合=fs.chunks 限制=0 cursor_id=120760258650 运行时间:1.8960 毫秒 MOPED:127.0.0.1:27017 COMMAND 数据库=ffos_development 命令={:count=>"fs.chunks", :query=>{"files_id"=>BSON::ObjectId('53c985c36d7572b6cd020000')}} 运行时间:0.4970ms 渲染文本模板(0.3ms) 发送数据(0.6ms) 在 23 毫秒内完成 200 次 OK(查看次数:0.6 毫秒)

在 2014-07-18 14:30:18 -0700 开始 GET "/uploads/job/avatar/53c98e5a6d7572b9c6000000/cuben-rustic.jpg" for 127.0.0.1 由 GridfsController#avatar 处理为 JPEG 参数:{"id"=>"53c98e5a6d7572b9c6000000", "filename"=>"cuben-rustic"} MOPED:127.0.0.1:27017 QUERY 数据库=ffos_development 集合=作业选择器={"_id"=>BSON::ObjectId('53c98e5a6d7572b9c6000000')} 标志=[] 限制=0 跳过=0 批处理大小=无字段=无运行时: 0.4900ms MOPED:127.0.0.1:27017 QUERY 数据库=ffos_development 集合=fs.files 选择器={"$query"=>{"filename"=>"uploads/job/avatar/53c98e5a6d7572b9c6000000/cuben-rustic.jpg"}, "$ orderby"=>{"uploadDate"=>-1}} flags=[] limit=-1 skip=0 batch_size=nil fields=nil runtime: 0.5350ms MOPED:127.0.0.1:27017 COMMAND 数据库=ffos_development 命令={:count=>"fs.chunks", :query=>{"files_id"=>BSON::ObjectId('53c98e5a6d7572b9c6020000')}} 运行时间:0.7430ms MOPED: 127.0.0.1:27017 QUERY 数据库=ffos_development 集合=fs.chunks 选择器={"$query"=>{"files_id"=>BSON::ObjectId('53c98e5a6d7572b9c6020000'), "n"=>{"$lt "=>7, "$gte"=>0}}, "$orderby"=>{"n"=>1}} flags=[] limit=0 skip=0 batch_size=nil fields=nil 运行时间:6.5520ms MOPED:127.0.0.1:27017 GET_MORE 数据库=ffos_development 集合=fs.chunks 限制=0 cursor_id=120550877243 运行时间:1.9530ms MOPED:127.0.0.1:27017 COMMAND 数据库=ffos_development 命令={:count=>"fs.chunks", :query=>{"files_id"=>BSON::ObjectId('53c98e5a6d7572b9c6020000')}} 运行时间:0.4840ms 渲染文本模板(0.2ms) 发送数据(0.6ms) 在 19 毫秒内完成 200 次 OK(查看次数:0.5 毫秒)

【问题讨论】:

  • 你也可以发布职位模型吗?
  • 我已经添加了模型。
  • 您面临的具体问题是什么?你收到任何错误吗?如果是这样,请在问题中添加。
  • 没有错误。问题是代码没有将“发布”的布尔值从假更改为真。它通过没有问题,但它只是不更新​​。不知何故,我需要我的控制器将特定工作的布尔值从 false 更新为 true。
  • 我的猜测是作业的 ID 可能没有归因于更新?我只是不知道。

标签: ruby-on-rails-4 mongoid


【解决方案1】:

我注意到的一个问题是您错误地使用了find_by 方法来定位Job 记录。如果您必须使用find_by,那么您必须指定您正在搜索的模型的属性名称,这在您的情况下是缺失的。

更好的选择是在基于主键 id 进行搜索时使用 find 方法,即,params[:job][:id] 指的是特定 Job 记录的 id

你需要做的是,替换

job = Job.find_by(params[:job][:id])

job = Job.find(params[:job][:id])  ## Using "find"

-或-

job = Job.find_by(id: params[:job][:id])  ## Using "find_by" - specify attribute name "id"

【讨论】:

  • 我收到替换错误。 Mongoid::Errors::InvalidFind in JobsController#update
  • 问题:使用 nil 调用 Document.find 无效。总结: Document.find 期望参数为 1 个或多个 id,如果提供 1 个 id,将返回单个文档,如果提供多个​​ id,则返回文档数组。解决方法:这很可能是由于将参数直接传递给 find,而参数不存在或访问它的键不正确。
【解决方案2】:

我让它工作了。我不得不再次将预览页面中的作业 ID 传递给控制器​​。

<%= form_for @job, url: '/jobs/publish/'+@job.id do |f| %>

然后将控制器修改为:

def update
    job = Job.find(params[:id])
    job.publish = true
    job.save!
    redirect_to '/jobs'
end

并将路由更改为“补丁”:

patch '/jobs/publish/:id' => 'jobs#update'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    相关资源
    最近更新 更多