gpt4 book ai didi

ruby-on-rails - Ruby on Rails 属性何时获得其方法?

转载 作者:行者123 更新时间:2023-12-02 04:46:51 24 4
gpt4 key购买 nike

我通过迁移向 Ruby on Rails 数据模型(客户端)添加了一个属性。我在 attr_accessible 语句中将属性 (veteran) 添加到模型中。我运行了迁移,以便该属性显示在 db/schema.rb 中。我将该属性添加到该特定对象的 spec/factories 工厂。

在模型的 View 中,我有这样的东西:

<td><%= f.label :veteran %></td>

<% if @client.veteran %>

<td><%= f.radio_button :veteran, :true, :checked => true %>Yes</td>

<td><%= f.radio_button :veteran, :false %>No</td>

<% else %>

<td><%= f.radio_button :veteran, :true %>Yes</td>

<td><%= f.radio_button :veteran, :false, :checked => true %>No</td>

<% end %>

我的问题是:即使在 Controller 中,在新的中,我做了客户端.new,这@client.veteran 语句报错:NoMethodError: @client 中的未定义方法老手

为什么老手的ActiveRecord知识没有进入Client对象?如何避免此错误?(我还要补充一点,在自动化测试中,Rspec 和 Cucumber 中没有出现该问题。)

更新。我现在明白我需要

 attr_accessor :veteran

但我不明白为什么其他属性在“attr_accessible”(用于白名单)中似乎没问题,但这个(新的)却不行。

Steve Turczyn, Controller 代码只是@client = Client.new。我很确定那是我看到的错误。我显然需要更好地理解 attr_accessor 与 attr_accessible。

最佳答案

您不需要 ActiveRecord::Base 中的 attr_accessor,Rails 会自动为您完成架构中的所有字段。

此外,您的 View 只需要这样:

<td><%= f.label :veteran %></td>

<td><%= f.radio_button :veteran, :true, checked: @client.veteran? %>Yes</td>

<td><%= f.radio_button :veteran, :false, checked: !@client.veteran? %>No</td>

关于你的问题

When does a Ruby on Rails attribute get its methods?

答案是,在运行迁移后,您已经可以访问其中创建的属性。如果出现这样的错误,请重新启动服务器,但这不是必需的。

关于ruby-on-rails - Ruby on Rails 属性何时获得其方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32148774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com