Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 对restful设计的建议?_Ruby On Rails_Ruby_Ruby On Rails 3_Rest_Architecture - Fatal编程技术网

Ruby on rails 对restful设计的建议?

Ruby on rails 对restful设计的建议?,ruby-on-rails,ruby,ruby-on-rails-3,rest,architecture,Ruby On Rails,Ruby,Ruby On Rails 3,Rest,Architecture,我有一个关于为我正在开发的应用程序的特定部分构建restful设计的最佳方法的问题 应用程序的一些背景信息: User has_one :settings_for_email 有一个配置文件控制器,它有一个显示动作。。比如: def show @user = current_user end <% form_for profile_path(@user) do |f| %> <% f.fields_for :settings_for_email do |s| %&g

我有一个关于为我正在开发的应用程序的特定部分构建restful设计的最佳方法的问题

应用程序的一些背景信息:

User has_one :settings_for_email
有一个配置文件控制器,它有一个显示动作。。比如:

def show
  @user = current_user
end
<% form_for profile_path(@user) do |f| %>
  <% f.fields_for :settings_for_email do |s| %>
    <% ... form fields ... %>
  <% end %>
<% end %>
最初是这样设置的,以便表单发回配置文件控制器。。比如:

def show
  @user = current_user
end
<% form_for profile_path(@user) do |f| %>
  <% f.fields_for :settings_for_email do |s| %>
    <% ... form fields ... %>
  <% end %>
<% end %>

我不喜欢这个,因为它有一个漏洞,允许修改正在编辑的用户记录。。。将其更改为@user=current_user对我来说没有多大意义,因为这是一个需要某种ID的更新操作。。因此,转到/profile/123或profile/456将产生相同的用户记录(因为它将使用当前用户,所以参数[:id]将是多余的)。。我觉得这很奇怪

作为补充说明,我需要一个控制器操作来将用户的电子邮件设置重置为默认设置

所以,我最终做的是开辟一条新路线:

resource :settings_for_email, :only => :create do
  post :reset, :on => :member
end
然后为电子邮件控制器创建设置:

#settings_for_email_controller.rb
def create
  current_user.settings_for_email.update_attributes(params[:settings_for_email_controller])
  redirect_to profile_url
end

def reset
  current_user.reset_settings_for_email!
  redirect_to profile_url
end

但后来我想,这有什么办法可以改进吗

如果我真的想让这个100%的安静,最好是:

#update_settings_for_email_controller:
def create
  current_user.settings_for_email.update_attributes(params[:settings_for_email_controller])
redirect_to profile_url
end

#reset_settings_for_email_controller:
def create
  current_user.reset_settings_for_email!
  redirect_to profile_url
end

我对此持怀疑态度,因为为它配备两个控制器似乎有点愚蠢。。但是我想不出更好的办法了。同样,使用更新需要id,销毁也需要id。我原本认为使用销毁操作来执行“重置”会很好,但是——再次。。它将涉及一个浪费的id参数。所以我想在这里问一下你们对这类事情的看法?

我想你们把事情搞混了:这里有两个用户。有一个用户的详细信息需要更改,然后有一个用户进行实际更改。通常,它们是相同的,但并不总是相同的,例如:管理员可能需要重置某些用户的密码

正在更改的用户记录的id应该进入REST界面,并且
user.find params[:id]
应该可以很好地处理这个问题

进行更改的用户必须进行身份验证(确保该用户是她声称的用户)和授权(允许该用户进行更改吗?)。这就是调用
当前用户时得到的用户。Gems希望能帮上忙


通常,控制器操作应获得
当前用户
,目标用户应确保当前用户有权对目标用户执行操作(因为他们是同一用户,当前用户是管理员或应用程序中的任何其他逻辑)然后才执行该操作。

我认为你把事情搞混了:这里有两个用户。有一个用户的详细信息需要更改,然后有一个用户进行实际更改。通常,它们是相同的,但并不总是相同的,例如:管理员可能需要重置某些用户的密码

正在更改的用户记录的id应该进入REST界面,并且
user.find params[:id]
应该可以很好地处理这个问题

进行更改的用户必须进行身份验证(确保该用户是她声称的用户)和授权(允许该用户进行更改吗?)。这就是调用
当前用户时得到的用户。Gems希望能帮上忙


通常,控制器操作应获得
当前用户
,目标用户应确保当前用户有权对目标用户执行操作(因为他们是同一用户,当前用户是管理员或应用程序中的任何其他逻辑)然后才执行该操作。

据我所知,我的控制器操作应该是:user=user.find(params[:id]);如果用户!=当前用户;呈现:text=>“错误!!!”;其他的更新_属性(参数[:user]);结束?这就是你的意思吗?这似乎是一个愚蠢的条件检查,因为登录用户(当前用户)将始终是应该更新的记录?据我所知,我的控制器操作应该是:user=user.find(params[:id]);如果用户!=当前用户;呈现:text=>“错误!!!”;其他的更新_属性(参数[:user]);结束?这就是你的意思吗?这似乎是一个愚蠢的条件检查,因为登录用户(当前用户)将始终是应该更新的记录?