这是我们的Rails 4应用程序的_header.html.erb ,使用Bootstrap 3组件制作: 如您所见,这有条件地显示导航栏,具体取决于当前用户是以注销,登录还是以管理员身份登录。 但是,我们想知道如何在不同的页面上显示不同的导航栏。 例如,在所有公共页面(家庭,function,定价,博客,帮助等)上,我们希望显示Features , Pricing和Blog链接(无论用户是否登录),但在内页上应用程序(仪表板,设置等)我们想要删除这些链接。 编辑:为了使事情更清楚,我们称之为公共页面的实际上是我们的StaticPages#Controller ,它依赖于我们的StaticPages#Controller ,而内部应用程序页面(如仪表板和设置)依赖于我们的Users#Controller StaticPages#Controller 。 我们怎样才能做到这一点? 我们需要创建一个新的_header.html.erb部分吗? 有没有特定的Rails方法呢?
我有一些模型的创建语句,但它在连接表中创建一条记录,无论该记录是否已存在。 这是我的代码的样子: @user = User.find(current_user) @event = Event.find(params[:id]) for interest in @event.interests @user.choices.create(:interest => interest, :score => 4) end 问题是无论如何都会创建记录。 我希望只有在没有记录的情况下才能创建记录; 如果记录确实存在,我希望它采用找到的记录的属性并加1或减1。 我一直在环顾四周看到一些名为find_or_create_by东西。 当它找到记录时这会做什么? 我希望它采用当前:score属性并添加1。 是否可以通过id查找或创建? 我不确定我会找到什么属性,因为我正在查看的模型是一个只有id外键和score属性的连接模型。 我试过了 @user.choices.find_or_create_by_user(:user => @user.id, :interest => interest, :score => 4) 但得到了 未定义的方法find_by_user 我该怎么办?
我的rails应用程序中有一个Player模型。 我正在评估的2列是最高级别和最高分数。 这是跨多个配置文件的单个玩家的统计数据跟踪,因此有可能这些值中的任何一个都可能低于数据库中的当前值。 因此,我只希望它更新特定列,如果传入的发布值大于数据库中的值。 阅读一些内置的validation选项,我无法像我想的那样工作,但是,我能够编写自己的validation工作,但代价是调用Player.find(id)该模型。 有没有办法解决这个问题,以便我的Player.update()不会同时导致UPDATE和SELECT? 这是我的模型: class Player self.highestLevel self.highestLevel = @p.highestLevel end end def eval_highestScore # if record in DB has higher value , update the value if @p.highestScore > self.highestScore self.highestScore = @p.highestScore end end def player_record @p = Player.find(id) end end 关于如何提高效率的任何想法,还是我应该不管它? 我一直在为Rails 4.x寻找更大更好的鼠标陷阱
我的理解是,行前面的if语句在行前面的代码之前进行了评估: ‘never shown’ if (false) 并且可以在if语句中进行赋值。 ‘shown’ if (value = ‘dave is king’) value #=> “dave is king” 并且,当分配了不存在的变量时,将创建该变量。 事先不需要它存在。 这是真的? 如果所有这些假设都是真的,为什么会失败呢? error_array < undefined local variable or method `error’ for 它在数组推右前分配给错误? 我想了解什么时候进行评估。 这个确实有效: if (error = import_value(value)) error_array << error end 现在我真的很困惑。