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" %>
你能张贴问题的路线,也?另外,查看您显示编辑链接的代码? – Surya 2014-09-19 20:14:40