我有一个不寻常的问题,我可以访问一个Object,但不能访问视图中的属性。任何援助,指导,非常感谢。
这是我的模型( ...
try {
$sql = 'INSERT INTO events SET
event_name = :event_name,
event_date = :event_date,
event_time = :event_time,
event_location = :event_location,
event_text = :event_text,
event_weblink = :event_weblink,
event_genre = :event_genre';
$s = $pdo->prepare($sql);
$s->bindValue(':event_name', $_POST['event_name']);
$s->bindValue(':event_date', $_POST['event_date']);
$s->bindValue(':event_time', $_POST['event_time']);
$s->bindValue(':event_location',$_POST['event_location']);
$s->bindValue(':event_text', $_POST['event_text']);
$s->bindValue(':event_weblink', $_POST['event_weblink']);
$s->bindValue(':event_genre', $_POST['event_genre']);
// $s->bindValue(':event_img', $_POST[$target_file]);
$s->execute();
$response = array('message' => 'insert done');
...
):
app/models/team_member.rb
这是我的控制器(class TeamMember < ApplicationRecord
attr_accessor :name
end
):
app/controllers/static_controller.rb
这是我的种子文件(class StaticController < ApplicationController
def index
@team_members = TeamMember.all
end
end
):
db/seeds.rb
这是我的观点(puts 'POPULATING TEAM MEMBERS'
team_member = TeamMember.create! :name => 'Jones Namerson'
team_member = TeamMember.create! :name => 'John Johnson'
team_member = TeamMember.create! :name => 'Billy Bob'
team_member = TeamMember.create! :name => 'Tom Thompson'
):
app/views/static/index.html.erb
这会产生如下输出:
<div class="team-member">
<a href="#bioModal1" class="portfolio-link" data-toggle="modal">
<img src="http://www.canyon-news.com/wp-content/uploads/2015/09/Pope-Francis-1.jpg" class="img-responsive img-circle">
<h4><%= @team_members[0] %></h4>
<p class="text-muted">Co-Owner</p>
</a>
</div>
因此,我可以在视图中访问Object,但我的目标是访问对象属性。我将通过添加我真正想要看到的内容来改变我的观点:
<image>THE IMAGE</image>
#<TeamMember:0x007fdd5e08c288>
Co-Owner
但这会产生:
<div class="team-member">
<a href="#bioModal1" class="portfolio-link" data-toggle="modal">
<img src="http://www.canyon-news.com/wp-content/uploads/2015/09/Pope-Francis-1.jpg" class="img-responsive img-circle">
<h4><%= @team_members[0].name %></h4>
<p class="text-muted">Co-Owner</p>
</a>
</div>
所以,基本上我的对象在View中可用,但不是它的属性?非常感谢任何帮助。
答案 0 :(得分:1)
你的模型中有这个:
attr_accessor :name
您的数据库中还有一个name
列。 attr_accessor :name
本质上就是简写:
def name
@name
end
def name=(s)
@name = s
end
但ActiveRecord通常为数据库支持的属性提供访问器和mutator方法,并且您已经提供了自己的name
和name=
方法(通过attr_accessor
)。了解数据库中name
列的任何信息。
从您的attr_accessor :name
课程中移除TeamMember
来电,您的问题就会消失。
答案 1 :(得分:0)
TeamMember类中的行“attr_accessor:name”不是必需的。与常规Ruby类不同,您正在创建ApplicationRecord的子类,因此只要您将TeamMember迁移到位,Active Record就会对其进行处理。
例如,如果运行类似“rails g model MyModel my_property:string”之后的“rake db:migrate”,Rails会创建一个扩展应用程序记录的MyModel类和一个带有name字段的my_models表。 MyModel类可以免费获取name属性的访问器,而无需添加任何代码。因此,像你正在做的那样再次添加可能会创建一个预期的行为
最后,如果您只想访问第一个对象,可以用@team_member = TeamMember.first替换@team_members = TeamMember.all。这只是一种增强。
我建议使用“rails c”进行测试
TeamMember.all
TeamMember.first
TeamMember.first.name