• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

用于编辑/更新各个模型属性的路由

ruby-on-rails 来源:keypulsations 6次浏览

我有一个用户模型和一个ProfileQuestionnaire模型。用户拥有一个ProfileQuestionnaire,每个ProfileQuestionnaire有五个问题(用户已经回答)作为属性。用于编辑/更新各个模型属性的路由

用户编辑操作显示用户已回答的五个ProfileQuestionnaire问题集。我的问题是:假设每个问题在这个用户#编辑视图中都有一个“编辑”按钮,我该如何修改我的路线(如下所示),以使这个“编辑”按钮可以指导用户专门针对特定问题进行编辑和更新的操作?也就是说,要一次一个编辑/更新ProfileQuestionnaire模型上的特定属性?

resources :users do 
    resources :profile_questionnaires 
    end 


===========解决方案如下:

Nested Resources

你可以这样做:

#config/routes.rb 
resources :users do 
    resources :profile_questionnaires #-> domain.com/users/:user_id/profile_questionnaires/:id 
end 

#app/views/users/show.html.erb 
<% @user.profile_questionnaires.each do |question| %> 
    <%= link_to question.name, user_profile_questionnaire_path(@user, question), method: :put %> 
<% end %> 

这将带您到profile_questionnaires#edit动作,你就必须再与自己工作:

#app/controllers/profiles_questionnaires_controller.rb 
class ProfilesQuestionnairesController < ApplicationController 
    def edit 
     @user = User.find params[:user_id] if params[:user_id].present? 
     @profile_questionnaire = ProfileQuestionnaire.find params[:id] 
    end 
end 

属性

为了改变你ProfileQuestionnaire模型特定的属性,你要记住,有在Rails中实现这个没有内置的方式 – 你只需要能够创造一个形式单一属性在那里。由于缺少上下文,我将不得不假设你想手动更改属性。我会做个人的方法是让这一切在edit视图,并使用一些条件语句,以确定哪些是否显示:

#app/views/profiles_questionnaires/edit.html.erb 
<%= form_for [@user, @profile_questionnaire] do |f| %> 
    <% %w(your params here).each do |param| %> 
     <%= f.text_field param.to_s if @type.include?(param.to_s) %> 
    <% end %> 
    <%= f.submit %> 
<% end %> 
  • 您的控制器不关心哪个PARAMS它发送
  • 你可以规定你希望显示/编辑
  • 它为您提供了扩展功能的能力属性

这里就是你的管理控制:

#app/controllers/profiles_questionnaires_controller.rb 
class ProfilesQuestionnairesController < ApplicationController 
    def edit 
     @user = User.find [:user_id] 
     @profile_questionnaire = ProfileQuestionnaire.find params[:id] 

     @type = params[:type] if params[:type].present? 
     @type ||= ProfileQuestionnaire.column_names 
    end 
end 

那么你可以发送下面的链接到控制器:

<%= link_to "x", user_profiles_questionnaire_path(@user, "4", type: "param_1" %> 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)