Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 在用户和组之间正确创建联接操作_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 在用户和组之间正确创建联接操作

Ruby on rails 3 在用户和组之间正确创建联接操作,ruby-on-rails-3,Ruby On Rails 3,我在尝试根据用户在成员表单new.html.erb中输入的名称为用户创建成员身份时遇到问题 user.rb has_many :memberships, :dependent => :destroy has_many :groups, :through => :memberships class Membership < ActiveRecord::Base attr_accessible :user_id, :group_id belongs_to :use

我在尝试根据用户在成员表单new.html.erb中输入的名称为用户创建成员身份时遇到问题

user.rb

  has_many :memberships, :dependent => :destroy
  has_many :groups, :through => :memberships
class Membership < ActiveRecord::Base
  attr_accessible :user_id, :group_id
  belongs_to :user
  belongs_to :group
end
  has_many :memberships, :dependent => :destroy
  has_many :users, :through => :memberships
<%= form_for(@membership) do |f| %>
  ...
  #error validation
  ...

  <div class="field">
    <%= f.label :group %><br />
    <%= f.text_field :group %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
def group_name
  if self.group
    @group_name ||= self.group.name
  end
end

def group_name=(group_name)
  @group_name = group_name

  self.group = Group.find_by_name(@group_name)
end
会员资格。rb

  has_many :memberships, :dependent => :destroy
  has_many :groups, :through => :memberships
class Membership < ActiveRecord::Base
  attr_accessible :user_id, :group_id
  belongs_to :user
  belongs_to :group
end
  has_many :memberships, :dependent => :destroy
  has_many :users, :through => :memberships
<%= form_for(@membership) do |f| %>
  ...
  #error validation
  ...

  <div class="field">
    <%= f.label :group %><br />
    <%= f.text_field :group %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
def group_name
  if self.group
    @group_name ||= self.group.name
  end
end

def group_name=(group_name)
  @group_name = group_name

  self.group = Group.find_by_name(@group_name)
end
会员控制器

  def create
      @group = Group.find_by_name(:group)
      @membership = current_user.memberships.build(:group_id => @group.group_id)
      if @membership.save
        flash[:notice] = "You have joined this group."
        redirect_to :back
      else
        flash[:error] = "Unable to join."
        redirect_to :back
      end
    end
def create
  @membership = current_user.memberships.build(params[:membership])
  if @membership.save
    flash[:notice] = "You have joined this group."
    redirect_to :back
  else
    flash[:error] = "Unable to join."
    redirect_to :back
  end
end
会员资格-\u form.html.erb

  has_many :memberships, :dependent => :destroy
  has_many :groups, :through => :memberships
class Membership < ActiveRecord::Base
  attr_accessible :user_id, :group_id
  belongs_to :user
  belongs_to :group
end
  has_many :memberships, :dependent => :destroy
  has_many :users, :through => :memberships
<%= form_for(@membership) do |f| %>
  ...
  #error validation
  ...

  <div class="field">
    <%= f.label :group %><br />
    <%= f.text_field :group %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
def group_name
  if self.group
    @group_name ||= self.group.name
  end
end

def group_name=(group_name)
  @group_name = group_name

  self.group = Group.find_by_name(@group_name)
end

...
#错误验证
...


我希望它做的是找到输入的组(如果存在),并在memberships表中创建相应的表条目。只是不确定我所做的是否正确。有什么建议吗?

您的代码现在无法工作的原因是因为这行代码:

@group = Group.find_by_name(:group)
应该是这样的(我不记得很抱歉)

在下一行调用错误,因为
@group
nil

但无论如何,您都应该在模型中使用虚拟属性之类的东西来处理这种类型的逻辑

会员资格。rb

  has_many :memberships, :dependent => :destroy
  has_many :groups, :through => :memberships
class Membership < ActiveRecord::Base
  attr_accessible :user_id, :group_id
  belongs_to :user
  belongs_to :group
end
  has_many :memberships, :dependent => :destroy
  has_many :users, :through => :memberships
<%= form_for(@membership) do |f| %>
  ...
  #error validation
  ...

  <div class="field">
    <%= f.label :group %><br />
    <%= f.text_field :group %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
def group_name
  if self.group
    @group_name ||= self.group.name
  end
end

def group_name=(group_name)
  @group_name = group_name

  self.group = Group.find_by_name(@group_name)
end
表格

<div class="field">
  <%= f.label :group_name, "Group" %><br />
  <%= f.text_field :group_name %>
</div>

你的代码怎么了?日志中有错误吗?它没有从groups表中找到group_id。给我一个错误“nil:NilClass的未定义方法'group_id'。我不确定是表单问题还是控制器问题,单行@group=group.find_by_name(params[:membership][:group])正是我想要的,谢谢