<%= form_for(@membership) do |f| %>
<%= f.collection_select :user_id, User.all, :id, :email %>
<%= f.collection_select :role_id, Role.all, :id, :name %>
<%= f.submit %>
<% end %>
我想要做的不是为用户使用选择框,而是想为用户的电子邮件添加文本字段。
<%= form_for(@membership) do |f| %>
<%= f.text_field :email %>
<%= f.collection_select :role_id, Role.all, :id, :name %>
<%= f.submit %>
<% end %>
Membership.rb
belongs_to :user
belong_to :role
attr_accessor :email
def email
self.user.email if self.user
end
我不知道在控制器中编写什么才能使其工作,这个attr访问器使用的东西和电子邮件方法还可以吗?任何帮助表示赞赏。
def create
@membership = Membership.new(params[:membership])
if @membership.save
redirect_to(memberships_url)
else
render :action => "new"
end
答案 0 :(得分:1)
我认为您正在寻找的是嵌套表格。在具有has_x标识的模型上,您可以使用accepts_nested_attributes_for。还有Railscast解释它。这意味着你有两个不错的选择:
答案 1 :(得分:1)
如果您只想更新现有用户,则必须在创建操作中通过电子邮件找到用户,因为成员资格需要user_id和role_id。