私はrails4を使用していますが、RORも初めてです。
私はデバイスを使用してユーザーを作成しています。「user_workspace」モデルのほかに、ユーザーに関連する「workspace」モデルがあります。
user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :user_workspaces
has_many :workspaces, through: :user_workspaces
end
ワークスペース.rb
class Workspace < ActiveRecord::Base
has_many :users, through: :user_workspaces
has_many :user_workspaces
end
user_workspace.rb
class UserWorkspace < ActiveRecord::Base
belongs_to :user
belongs_to :workspace
end
ワークスペースを作成してインデックスページに表示したい
ワークスペース_コントローラー
def create
@user=User.find(params[:id])
@user_worspace = @user.user_workspaces.build(params[:user_worspace])
@workspace = @user_worspace.build_workspace(params[:workspace].permit(:name))
if @workspace.save
flash[:notice] = "workspace created"
redirect_to workspaces_path
else
flash[:error] = "Name cant be blank"
redirect_to workspaces_path
end
end
def index
@user=User.find(params[:id])
@user_worspace = @user.user_workspaces.build(params[:user_worspace])
@workspace = @user_worspace.build_workspace
@users = current_user.user_workspaces.collect(&:workspace_id)
@workspaces =@users.workspaces.all
end
モーダルビューを使用してインデックスページから新しいワークスペースを作成しているため、インデックスに new を指定しました。
index.html.erb
<div class = "container">
<% if @users.present? %>
<% @workspaces.each do |workspace| %>
<div class= "workspace-list">
<strong><%= link_to workspace.name, workspaces_show_path(workspace.id) %></strong> </div>
<% end %>
<% end %>
</div>
has_many :throught 関連付けを使用して物事を作成および表示する正確な方法を知りたいです。