小编Sar*_*rah的帖子

如何更改Rails 3路由中的默认参数名称?

在我的Rails 3项目中,我有一个这样的路由列表:

resources :projects do
    resources :studies
end

resources :sticky_notes
resources :study_templates

...
Run Code Online (Sandbox Code Playgroud)

目前默认情况下,可以使用params [:id]调用来自这些路由的URL中的ID,但我希望能够使用params [:sticky_note_id],params [:study_template_id],params [:study_id]等来调用它们.有没有办法可以为这些项目的ID指定参数名称?我是否必须在没有"资源"的情况下手动编写每条路线?

谢谢!

编辑:这是我正在尝试做的一个例子:当路由定义如上所述时会发生这种情况:

resources :projects do
    resources :studies
end
# results in /projects/:project_id/studies/:id
# /projects/:project_id/studies/:id/edit
# /projects/:project_id/studies/:id/new
# etc.

resources :sticky_notes
# results in /sticky_notes/:id
# /sticky_notes/:id/edit
# /sticky_notes/:id/new
# etc.
Run Code Online (Sandbox Code Playgroud)

这就是我要的:

match '/projects/:project_id/studies/:study_id' => 'studies#show'
match '/projects/:project_id/studies/:study_id/edit' => 'studies#edit'
match '/projects/:project_id/studies/:study_id/new' => 'studies#new'
...

# results in /projects/:project_id/studies/:study_id
# /projects/:project_id/studies/:study_id/edit
# etc

match '/sticky_notes/:sticky_note_id' => 'sticky_notes#show'
match '/sticky_notes/:sticky_note_id/edit' => 'sticky_notes#edit'
match '/sticky_notes/:sticky_note_id/new' …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-on-rails-3

6
推荐指数
1
解决办法
1360
查看次数

尝试提供现有Pylons应用程序时出现PasteScript错误

我正在尝试在OS X Snow Leopard上提供现有的Python 2.5 Pylons应用程序.

我已经安装了Python 2.5并将其设置为默认的Python安装,安装贴纸,并安装了应用程序所需的Pylons版本(0.9.6.1)以及其他鸡蛋...但是当我cd到主文件夹时做"paster serve development.ini"我得到以下内容:

File "/usr/local/bin/paster", line 5, in <module>
    from pkg_resources import load_entry_point

File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/pkg_resources.py", line 2603, in <module>

File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/pkg_resources.py", line 666, in require

File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/pkg_resources.py", line 565, in resolve

pkg_resources.DistributionNotFound: PasteScript==1.7.3
Run Code Online (Sandbox Code Playgroud)

我肯定做过"easy_install PasteScript == 1.7.3",但我仍然遇到此错误.有什么东西真的很明显我错过了吗?救命?

提前致谢.

python pylons paste paster osx-snow-leopard

5
推荐指数
1
解决办法
2006
查看次数

rails 3中的onchange remote_function - 它有效吗?我怎么能不引人注目地完成它?

我有两个问题.

我在rails 3应用程序中有一个select标签,如下所示:

 <%= select(@adverse_event_template_settings, 
    "display_arms", 
    options_for_select([["Yes", true], ["No", false]]), 
    { :selected => :display_arms },  
    :onchange => remote_function(:update => "display_arms", 
          :method => "put", 
          :with => "'display_arms=' + value", 
          :url => { :controller => :adverse_event_template_settings, 
               :action => :update, :id => @aets.id})) %>
Run Code Online (Sandbox Code Playgroud)

这就是我想要它做的事情 - 也就是说,当选择框值改变时调用控制器动作.

虽然这有效,但我想知道1)这在rails 3中有效吗?我知道这是一个突兀的javascript,但在rails 3中工作的remote_function对我来说似乎很奇怪 - 这里有什么不对吗?

如果以上内容无效,我真的非常想知道2)我怎么能不引人注意地完成同样的动作(即在同一个控制器中调用相同的动作)?有没有办法在导轨3中简单干净地做到这一点?我迫切需要编写这方面的帮助.

非常感谢!如果您需要更多详细信息,请告诉我们.

ruby-on-rails ruby-on-rails-3

5
推荐指数
1
解决办法
6393
查看次数

提交表单时出错,Rails 4中呈现的URL会更改

我已经创建了一个用户注册页面。当用户错误地提交表单时,显示验证错误时,它不会在同一URL上呈现。

注册表单位于以下网址:

http://localhost:3000/signup
Run Code Online (Sandbox Code Playgroud)

我为注册页面添加了以下路线:

resources :users
match '/signup',  to: 'users#new', via: 'get'
Run Code Online (Sandbox Code Playgroud)

当我提交表单时,将显示模型验证,但URL重定向到:

http://localhost:3000/users
Run Code Online (Sandbox Code Playgroud)

我希望用户在提交表单后保留在相同的URL。

http://localhost:3000/signup
Run Code Online (Sandbox Code Playgroud)

这是我的控制器代码:

def new
    @user = User.new
  end

  def create

    @user = User.new(user_params) # Not the final implementation!

    if @user.save
      # Handle a successful save.
    else
        render 'new'
    end
  end
Run Code Online (Sandbox Code Playgroud)

这是我表格的开始标记:

<%= form_for @user, url: {action: "create"}  do |f| %>
Run Code Online (Sandbox Code Playgroud)

forms routes ruby-on-rails ruby-on-rails-4

5
推荐指数
1
解决办法
922
查看次数

如何使用 Django 装饰器测试用户对对象的所有权

我正在处理一个 Django 项目,并试图弄清楚如何测试用户所有权并允许根据结果进行编辑或重定向。

我有一个模型SceneScene链接到User跟踪哪个用户创建了一个特定的Scene

class Scene(models.Model):
    user = models.ForeignKey(User)
    [rest of Scene model]
Run Code Online (Sandbox Code Playgroud)

我有一个 URL 模式来编辑这样的特定Scene对象:

url(r'^scenes/(?P<pk>[0-9]+)/edit/', SceneUpdateView.as_view(), name='scene-edit'),
Run Code Online (Sandbox Code Playgroud)

我有一个通过 django-allauth 登录的用户。我希望只有Scene所有者能够编辑Scenes.

我试图弄清楚如何使用装饰器来测试是否scene.user.id == self.request.user.id用于 URL 调用的特定场景。

我需要的URL信息发送到permission_requireduser_passes_test装饰(这是可能的)?

我怎样才能做到这一点?

django

3
推荐指数
1
解决办法
2164
查看次数