我的协会约有50%的工作..
我有三个表 - 用户,乐队和BandMmberships
我可以从我的视图中从两个表中提取数据库中的信息,它工作正常..
@ user.bands.each
当我在控制台中运行命令时,它会保存到band数据库和bandmemberships数据库中
user = User.first
user.bands.create(:name =>"sample")
但是,如果我在控制台中运行"preferred"命令,它将失败:
user = User.first
user.create_band(:name =>"sample")
NoMethodError:#User的未定义方法`create_band':0x007ff0b9182728
但是,如果我使用bands/new.html.erb形式,只有乐队保存在数据库中,但在关联表(bandmemberships)中没有任何内容.不知道在哪里看起来真的但我觉得我只是错过了一行代码来使它全部工作
主视图 views/users/show.html.erb
<% provide(:title, "My Dashboard") %><%= render @user %>You are in <%= @user.bands.count %> bands:
<% if @user.bands.any? %> <% @user.bands.each do |band| %><%= render band %>
<% end %> <% else %><% end %>You are not in any bands.
Click here to join a band
Bands Controller controllers/bands_controller.rb
class BandsController < ApplicationController def create @band = Band.new(strong_params) if @band.save redirect_to @band else render 'new' end end def new @band = Band.new end def show @band = Band.find(params[:id]) end private def strong_params params.require(:band).permit(:name) end end
用户控制器 controller/users_controller.rb
class UsersController < ApplicationController def create @user = User.new(strong_params) if @user.save sign_in @user flash[:success] = "You are now signed in" redirect_to @user else render 'new' end end def show @user = User.find(params[:id]) end def new @user = User.new @user.bands.build end private def strong_params params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation) end end
用户模型 models/user.rb
class User < ActiveRecord::Base has_many :bandmemberships has_many :bands, through: :bandmemberships has_many :tours, through: :bands accepts_nested_attributes_for :bands, :tours before_save {self.email = email.downcase } before_create :create_remember_token validates :firstname, presence: true, length: { maximum: 50} validates :lastname, presence: true, length: { maximum: 50} VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false} has_secure_password validates :password, length: { minimum: 6 } def User.new_remember_token SecureRandom.urlsafe_base64 end def User.encrypt(token) Digest::SHA1.hexdigest(token.to_s) end private def create_remember_token self.remember_token = User.encrypt(User.new_remember_token) end end
Band Model models/band.rb.
class Band < ActiveRecord::Base has_many :bandmemberships has_many :users, through: :bandmemberships has_many :bandtourmemberships has_many :tours, through: :bandtourmemberships accepts_nested_attributes_for :tours accepts_nested_attributes_for :users end
乐队/用户关联模型 models/bandmembership.rb
class Bandmembership < ActiveRecord::Base belongs_to :user belongs_to :band end
CDub.. 5
有has_many
,你不能使用,create_object
因为该方法不存在.
您将要使用user.bands.create(attributes_hash)
以创建与用户关联的波段.
查看AR协会文档以has_many
获取更多详细信息.
有has_many
,你不能使用,create_object
因为该方法不存在.
您将要使用user.bands.create(attributes_hash)
以创建与用户关联的波段.
查看AR协会文档以has_many
获取更多详细信息.