程序大致是这样的:一个简单的论坛网站。话题为 group,评论为 post, group 的 model 有title
,description
,user_id
。post 的 model 有 group_id
,user_id
,content
。user 需要加入/退出 一个 group,成为成员/游客。
user 加入或退出群组 group 是一个多对多的关系。
首先,修改 model/user.rb
def is_member_of?(group) # AAA 测试是不可以删除,也不可加@,这里(group)应该是作为一个参数吧?
participated_groups.include?(group) # BBB
end
def join!(group)
participated_groups << group
end
然后在group_controller.rb
里定义
def join
@group = Group.find(params[:id])
if !current_user.is_member_of?(@group) # CCC 为什么在 controller里是@group?
current_user.join!(@group) # DDD
flash[:alert] = "已经加入本版!"
else
flash[:warning] = "无解"
end
redirect_to group_path(@group) # EEE 这里测试可以把(@group)删除,不影响
end
最后这段代码是views/groups/index.html.erb
,能一个显示 group 的 title,description,edit,delete,的列表
<% @groups.each do |group| %>
<tr>
<td><%= link_to(group.title, group_path(group)) %></td> # FFF
<td><%= group.description %></td>
<td><%= group.user.email %></td>
<td>
<%= link_to "Edit", edit_group_path(group), class: "btn btn-info btn-sm"%> | # GGG 为什么不可以是@group ?或者不加(group)??
<%= link_to "Delete", group_path(group), method: :delete, class: "btn btn-warning btn-sm", data: {confirm:"are you sure?"}%>
</td>
</tr>
<% end %>
以上代码我在后方标注 # AAA 等字样的代码都有(@group)
或 (group)
结构,我尝试去删除变动观察错误,但基础差,始终不明白为什么有时候有 @ ,有时候又没,有时候后面可以不用加()。希望各位前辈指教一下,谢谢🙏