0

首先,我已经学习 Rails 8 个月了,但感觉就像我昨天开始的一样,所以请多多包涵。我正在尝试解决为什么我的价值(称为可见)无法正常运行。我正在使用 Simple_form。'visible' 是单选按钮值:

 <div class='review-form'>
      <%= simple_form_for(@review) do |f| %>
  # input boxes for current_user to put text here

  #'public' radio button, checked by default, class is for css
  <%= f.radio_button :visible, "true" , :class => "share_button" %>

  #'private' radio button, class is for css
  <%= f.radio_button :visible, "false", :class => "keep_private_button" %>

  #user can cancel
  <%= link_to I18n.t('write_review.cancel_button'), landing_page, 
  :class => 'btn' %>

  #user can submit
  <%= f.button :submit, I18n.t('write_review.submit_button'), 
  :class => 'btn btn-primary' %>

这个想法是 current_user 撰写评论 - 如果他们将其设为“公开”,则任何其他用户都可以看到它,如果是私人用户,则只有他们可以看到它。单选按钮工作正常 - 当我注销时,查看不同机器上的应用程序等,单选按钮处于上次保存的状态。问题是当前的评论@review 总是对每个人可见,无论单选按钮的状态如何。

我把<%= @review.visible? %>审查表。每次我刷新页面时它都是“真”,即使单选按钮可能是假的。我保存评论,@review.visible 然后进行相应匹配。但后来我刷新,它又回到了真实。

我认为问题可能是:

在我的 schema.rb 我有:

t.boolean  "visible",                                    :default => true

我删除:default => true了,没有任何改进,但我听说你不应该手动干预 schema.rb 反正。

你认为 default => true 是导致问题的原因吗?做一个“迁移”是要走的路吗?我如何在迁移中说出“默认 => true”部分?

最后,虽然我的 schema.rb 有“布尔”,但我的实际数据库有visible: tinyint(1),我认为这很可疑,但我在网上阅读过它们实际上是同一回事,所以我认为这不是问题 - 如果你认为不同,让我知道。

4

2 回答 2

2

你不应该碰 db/schema.rb。这是通过迁移和/或数据库状态自动更新的。您有正确的想法,您需要删除“可见”的默认值,但您需要在迁移中执行此操作。change_column_default 可能是您想要的。

http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column_default

此外,布尔值与 tinyint(1) 也可以。这是 MySQL 的事情,因为 MySQL 没有真正的布尔类型。

于 2013-06-25T21:56:13.747 回答
1

为了回应 Phillip 所说的,如果您需要更改数据库,您不应该通过 schema.rb 进行,您需要迁移。您应该在 mysql 上为布尔值设置默认值(因为否则它是三态而不是二进制(真、假、空)。

如果你认为问题是默认错误,你可以做一个 change_column 迁移,你可以从命令行工具生成一个迁移:

rails g migration UpdateTableName

打开迁移文件(在 models/db/migrate/timestamp_update_table_name.rb 中)并将代码更改为:

def change 
    update_column :table_name, :columnname, :boolean, :default => false
end

然后通过命令行工具运行它:

rake db:migrate

如果您认为您的问题是表单,您总是可以查看类似这样的内容,看看问题是否出在表单的值上。

于 2013-06-25T22:53:17.813 回答