我有两个 model,user 和 userinfo,其中 user has_one userinfo,user 登录后进入页面显示的是 user 和userinfo的信息,我想在这个页面加一个编辑按钮,允许用户修改这些信息,那应该对应users#edit还是userinfos#edit呢??因为我想在编辑页面一次修改user和userinfo。请教一下大家了,谢谢!
model 和 controller 不是一回事。 你的 controller 有几个,难道是两个,一个 userscontroller,一个 userinfoscontroller,应该是一个。
#1 楼 @woaigithub 请问一下,有两个 model 不是有两个 controller 吗?我有点搞混。也就是两个 model 可以由一个 controller 来操作?虽然我知道这问得很弱,但我是第一次自己写 rails 程序...
model 和 controller 不是一回事。 model 是你的对象模型,表示对象的关系。 controller 是响应请求用的,定位资源,和 model 没有直接关系。 没有强制 1:1,也不应该强制 1:1。
你是不是用 rails g scaffold user rails g scaffold user_info references:user 创建的结构。
#4 楼 @woaigithub 不是,我是一个个 generate 出来的。model 和 controller 独立弄,但是之前看到的教程一般都是一个 model 有一个 controller,所以以为是这样。
#10 楼 @woaigithub 还有个疑问请教: 用了 form_for @user之后,block 里面关于 userinfo model 各个属性应该怎么写 formhelper?我用 f.text_field 怎么写都不对...
<%= form_for(@user) do |f| %>
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :email %><br />
<%= f.text_field :email %>
</div>
<%= f.fields_for :address do |address| %>
<div class="field">
<%= address.label :city %><br/>
<%= address.text_field :city %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
我这个例子是 user 和 address
class User < ActiveRecord::Base
has_one :address
end
class Address < ActiveRecord::Base
belongs_to :user
end
#13 楼 @woaigithub 最后再请教一下,这个
<%= f.fields_for :address do |address| %>
<div class="field">
<%= address.label :city %><br/>
<%= address.text_field :city %>
</div>
我照这写了一个 userinfo.real_name,虽然生成了<input id="user_userinfo_real_name" name="user[userinfo][real_name]" size="30" type="text">
但是却没有显示 real_name 的值出来,是搞错了吗?
#18 楼 @woaigithub 本身有值的。不知道这跟我这个页面是 partial 有没有关系,我的 user 不是@user
,而是在 render 这个页面的时候用 locals 传进来的。值都有的。
是因为没有查询,User.find(params[:id]) 只查询了 user 表的信息,没有查询 userinfo 表的信息。
应该是
<%= f.fields_for @user.address do |address| %>
#20 楼 @woaigithub 那原来你的 address 是怎么查的呢?我知道我的 user.userinfo 会查询,但怎么用到 fields_for 里呢?实在糊涂了。
===== 可以了, 用
fields_for user.userinfo
就没问题。谢谢!!