2011-07-21 141 views
-1
<%= 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 
+2

如果您选择了最佳问题标题,会更好。我必须阅读整个问题主体以了解你在问什么。 –

回答

1

我觉得你要找的是一个嵌套的形式。在具有has_x名称的型号上,您可以使用accepts_nested_attributes_for。还有一个解释它的。这意味着你有两个不错的选择:

  1. 重新定义你的表格是为用户和使用fields_for添加成员属性
  2. 开关使用你的模型,以便用户属于会员和会员has_x用户(s)
+0

不,管理员正在创建成员资格,但我不希望他们看到所有用户,他们必须输入用户的电子邮件,如果他们想要分配角色 – rOrman

+0

因此,电子邮件字段存储在用户模型下,管理员将输入用户的电子邮件地址来自会员表单? – jklina

+0

是的电子邮件字段是用户模型。会员模式有user_id – rOrman

1

如果您只想更新现有用户,您必须通过电子邮件在您的创建操作中找到用户,因为Membership需要user_id和role_id。