Rails 3 - 应用程序布局问题



我在理解Rails的一般应用程序布局时遇到了一些困难。

基本上,我正在为足球比赛制作一个网络应用程序。教练登录并进入/coach/index 页面。在该页面上,他们可以使用 JavaScript 前端绘制他们的游戏等。我的问题是,为了保存播放,我需要将该 JSON 发送到服务器,以将其记录在正确的播放数据库条目中。

  1. 我的布局在逻辑上是否正确?例如,登录的教练应该将他带到该页面,然后他在那里绘制并保存它们,创建新游戏,加载它们等,还是我应该在由 Play 控制器管理的页面上执行此操作?

  2. 我想将游戏绘图引擎生成的 JSON 保存到数据库中。最好的方法是什么?我看到的所有 Rails AJAX 教程都基于简单的表单,您可以在其中设置远程 => true 属性等等。如何在没有显式表单的情况下制作 AJAX 发布/获取到 Rails 数据库,并处理输入?

  3. 这可能是因为我缺乏 Rails 的专业知识(我正在努力边学边学),但是在你更有经验的人看来,对我来说,确保向制作它们的教练展示正确比赛的最佳方式是什么?我在理解控制器如何访问由其他控制器控制的东西方面有点困难。我敢肯定,这种事情一定有一些约定。

我想得越多,我就越觉得登录应该将您带到/play 目录,我应该在那里修改创建等内容,以便做我想做的事情。提前谢谢。

  1. 您的布局是否合乎逻辑? /coaches作为登录教练的目的地是有意义的。如果您的应用程序用户只是教练,那么即使是根也是有意义的。当教练登录时,他会进行某种形式的coaches#show,但这并不意味着您做错了什么,因为URL类似于/profile。并非所有内容都需要在URL端遵循完整的REST.。在现实世界中,new动作都不会驻留在它自己的古朴小页面上。如果在/coaches页面上嵌套新的 Play 表单是有意义的,则您的网址不需要反映它。

控制器控制与资源的交互。在/coaches页面中,您仍会向plays#destroy发送删除播放请求,并通过plays#create验证新播放,这可能会render 'coaches/index' when it fails.

  1. 我从来没有真正在Rails中处理过AJAX。

  2. 确保教练只看到自己的比赛的最佳方法是通过Coach has_many :plays协会确定他们的范围。Rails 身份验证解决方案(如 Devise)中的约定是提供一个方法current_user该方法返回当前登录的用户的用户模型的实例。

您的coaches#index操作可能如下所示:

# Coaches controller
def index
  @plays = current_user.plays
end

那么你的视图可以有:

# views/coaches/index.erb
<ul>
<% for play in @plays %>
  <li><%= play.name %></li>
<% end %>
</ul>

你不会做的:@plays = Play.where(:user_id => @user.id).

它还简化和保护其他操作。考虑:

@play = current_user.plays.new
@play = current_user.plays.build(:name => "My First Play")
redirect_to @play, :notice => "Success!" if @play.save
current_user.plays.find(params[:id]).destroy

要回答您的问题,请添加评论:

# Coaches controller
def new
  @play = current_user.plays.new
end
def create
  @play = current_user.plays.build(params[:play]) # @play now already contains the association to the coach that created it.
  if @play.save!
    redirect_to # somewhere
  else
    render 'coaches/index'
  end
end
  • 如果你不熟悉Railscasts,我强烈推荐它们。即使观看您不会很快实施的主题的剧集也会给您带来良好的曝光率。
  • 例如,这里是Devise上的Railscast。Devise在Github上也有不错的文档。
  • 我最近买了CodeSchool关于Rals Best Practices的Couse。尽管其中一些可能超出了您的直接掌握范围,但它是您始终可以重新访问的资源。我一直在查阅随附的幻灯片,以寻找更好的做事方法。

相关内容

  • 没有找到相关文章

最新更新