gpt4 book ai didi

ruby-on-rails - 为什么 params "id"键会从 params[ :id] into params[:model_id]?

转载 作者:行者123 更新时间:2023-12-02 09:37:06 29 4
gpt4 key购买 nike

当我转到角色 Controller 时,显示操作,所有正常的 params[:id] 都是根据 REST 应该如何。

在显示 View 中,我渲染了部分。在该部分中,我有一个指向 vote_socionics 操作的链接。此操作在 socionics_votes 模块下定义,该模块包含在角色 Controller 中。 (我这样设置是因为我有其他 Controller 也包含此模块)。

我的问题是,当我单击此链接时,它会转到 socionics_votes_module.rb 文件中的 set_votable 私有(private)方法,params[: id] 不再存在。使用pry,我发现它实际上变成了 params[:character_id]

问题:

1)为什么会发生这种情况(是因为它转到“不同的” Controller ,即使它是一个模块?)

2) 我该如何解决这个问题?我认为将其设置为 params[:id] 会更优雅,而不必执行 if-else 来解释两个键。

characters_controller.rb

class CharactersController < ApplicationController
include SocionicsVotesModule

def show
@character = Character.find(params[:id])
end

characters/show.html.haml

= render partial: 'votes/vote_socionics', 
locals: { votable: @votable, votable_name: @votable_name, socionics: @socionics }

_vote_socionics.html.haml

= link_to content_tag(:div,"a"), send("#{votable_name}_vote_socionics_path", votable, vote_type: "#{s.type_two_im_raw}"), 
id: "vote-#{s.type_two_im_raw}",
class: "#{current_user.voted_on?(votable) ? 'voted' : 'not-voted'}",
method: :post,
data: { id: "#{s.type_two_im_raw}" }

socionics_votes_module.rb

module SocionicsVotesController
extend ActiveSupport::Concern

included do
before_action :set_votable
end

private
def set_votable
votable_constant = controller_name.singularize.camelize.constantize
@votable = votable_constant.find(params[:id]) # This is where it fails, since there is no params[:id], and rather, params[:character_id]
end

def set_votable_name
@votable_name = controller_name.singularize.downcase
end

routes.rb

concern :socionics_votes do
post 'vote_socionics'
end

resources :characters, concerns: :socionics_votes
resources :celebrities, concerns: :socionics_votes
resources :users, concerns: :socionics_votes

鼠标悬停在局部中时链接的 URL。

本地主机..../characters/4-cc/vote_socionics?vote_type=neti

.find(params[:id] || params[:"#{@votable_name}_id"]) 这样的东西不起作用,而且看起来很愚蠢。

最佳答案

您需要添加 vote_socionics 路由作为资源的成员:

concern :socionics_votes do
member do
post 'vote_socionics'
end
end

这样id参数就可以正确设置

关于ruby-on-rails - 为什么 params "id"键会从 params[ :id] into params[:model_id]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24550398/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com