【问题标题】:Change View based on Option selected in select_tag in rails根据在 rails 的 select_tag 中选择的选项更改视图
【发布时间】:2017-01-29 17:10:34
【问题描述】:

我正在尝试制作一个表单,用户可以像这样使用他们的用户名正常地发布帖子 -> 正常

  =form_for @confession , html: {multipart: true} do |f|
    =f.label :Confess
    =f.text_area :confession , require: true
    =f.file_field :confessionimage
    =f.select (:id,options_for_select(ID))
    =f.submit 'Confess'

或匿名,他们的名字将被隐藏,没有人会知道谁发布了这篇文章..为此,我认为我将在数据库中创建一个名为匿名的用户,如果用户在发布时在 select_form 中选择匿名,他们将以匿名用户身份发帖。

为此,在我的控制器中,我想要这样的东西,我无法理解的要点是控制器如何知道用户选择了什么?

这是我的控制器

    def index 
       @amitian = Amitian.where(institute: current_amitian.institute) if                 amitian_signed_in?
       @confessions = Confession.where(amitian_id: @amitian.ids).order('created_at   DESC') if amitian_signed_in?
       @confession = current_amitian.confessions.build 
       @anonymous = Amitian.where(email: anonymous@anonymous.com)
       # (if anonymous selected )
       do @anonymous.confessions.build   
    end

【问题讨论】:

  • 表单数据将在 params hash 中可用
  • 你能用代码 sn-p 解释一下吗
  • 我希望你的实际缩进比这里的更有序,因为到处都是。干净的代码是可读的代码,可读的代码更容易发现bug。
  • 显然这是我有正确缩进的代码......但这不是我所要求的,你能帮我解答一下吗
  • 告诉我如何使用 params[:postid] 访问 f.select 元素 rest 我会弄清楚,在我的控制器中我如何知道用户是选择匿名还是他的名字

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rubygems


【解决方案1】:

要访问此 :id 参数,请使用 confession_params[:id]params[:confession][:id] 如果你想有条件地加载不同的视图,你可以使用这样的 respond_to 块:

if confession_params[:id] == 1 #or params[:confession][:id] == 1
  loaded_view = :foo
else
  loaded_view = :bar
end

respond_to do |format|
  format.html { render loaded_view }
end

这将加载 foo.html.erbbar.html.erb,基于您的 @confession :id 参数,由您在 form_for 标记上的选择传递,它根据您的视图的变量模型加载参数名称。

【讨论】:

  • [:id] 你的意思是 [:confession][:postid] 即 [:tablename][:attribute] ryt ?
  • 我在我的代码中尝试过这个@anonymous.each do |a| @ debug = a if params[:confession][:postid] == 'Anonymous' @confessions = a.confessions.build else @confession = current_amitian.confessions.build 得到错误 = undefined method '[]' for nil:尼尔类
  • 那么您使用的是非标准参数。尝试读取请求的日志,它会打印带有标识符的参数。
  • 会是这样的:Processing by Auto::SitemapController#group as XML Parameters: {"group"=>"potal_grand_brasil"} 在这种情况下,唯一的参数是params[:group],你应该确定哪个是你需要的
  • 你也可以通过p params 来查看传递了什么,或者使用一些调试工具,如byebug,如果你找不到进入日志的方式
猜你喜欢
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2012-09-18
  • 2018-08-25
  • 2020-07-12
相关资源
最近更新 更多