2011-05-09 72 views
1

我在使用Rails的一般应用程序布局时遇到了一些困难。Rails 3 - 应用程序布局问题

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

  1. 我的布局是否正确,逻辑?如果登录的教练带他进入该页面,然后他在那里抽出那些比赛并保存它们,创建新的,加载它们等等,或者我应该在Play控制器管理的页面上执行此操作?

  2. 我想将播放绘图引擎生成的JSON保存到数据库中。要做到这一点,最好的方法是什么?我看到的所有Rails AJAX教程都基于简单的表单,在这些表单上设置了remote => true属性。如何在没有显式表单的情况下为Rails数据库创建AJAX POST/GET,并处理输入?

  3. 这可能是到我缺乏的Rails诀窍(我努力学习,因为我去),但什么,在你的经验更丰富的看法,对我来说,以确保正确剧本获得最佳方式显示给做他们的教练?我在理解控制器如何访问由其他控制器控制的东西方面有点挣扎。我确信这种事情必须有一些约定。

我越去想它,它就越我看来,登录应该把你带到/播放目录,我应该修改创建和这样的在那里为了做我想做的去做。 在此先感谢。

+0

另一件事我想问问:我怎么有提交到数据库的隐蔽入口 - 如,当有人建立了一个新的游戏,我想这与该用户无需对他们进行相关明确地说。我如何做到这一点? – Red 2011-05-09 18:45:55

回答

0
  1. 是您的布局逻辑? /coaches作为登录的Coach的目的地是有意义的。如果您的应用程序用户只是教练,那么即使是根目录也是合理的。当Coach登录时,他会采用某种形式的coaches#show,但这并不意味着您只是因为网址类似于/profile而做错了某些事情。并非所有的东西都需要遵循URL的完整REST.on。在现实世界中,没有任何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,如果你不熟悉他们。即使观看关于您不会很快实施的主题的剧集,也会给您带来良好的曝光度。
  • 例如,这里有一个Railscast on Devise。 Devise在Github上也有不错的文档。
  • 我最近在Rals Best Practices上购买了CodeSchool的couse。即使其中的一些可能超出了您的直接掌握范围,但您仍可以随时重新访问该资源。我会随时查阅附带的幻灯片,寻找更好的做法。
+0

感谢百万@Dobry,这是一个很棒的答案。有很多好东西想在那里,并感谢你的链接。我对Rails for Zombie很熟悉,但我没有意识到他们有更高级的教程 - 非常好! – Red 2011-05-16 16:49:20