- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我们有一个应用程序必须使用在 .net 上运行的外部数据库进行身份验证。有一个单独的 Rails 应用程序,安装为处理身份验证的 gem。当某人进行身份验证时,他们的信息将存储在 session 对象中。该应用程序本身是一种讨论论坛。
当我通过附件 Controller 创建附件时,所有属性都正确保存到数据库中。但是,当我在讨论模型中使用 nested_attributes_for
时,只有定义回形针的属性会被传递。 created_by
属性为空。否则,其他一切都是一样的。
为什么这个属性没有被添加到数据库中?
讨论模式:
class Discussion < ActiveRecord::Base
belongs_to :creator, :class_name => "Person", :foreign_key => "created_by"
belongs_to :updater, :class_name => "Person", :foreign_key => "updated_by"
belongs_to :discussion_group
belongs_to :discussion_category
has_many :discussion_comments, dependent: :destroy
has_many :discussion_attachments, dependent: :destroy
accepts_nested_attributes_for :discussion_attachments, allow_destroy: true
validates :discussion_group_id, on: :create, presence: :true
validates :subject, :body, presence: :true
validates :external_id, on: :create, uniqueness: :true
before_create :add_external_id
validates_associated :creator, :updater, :discussion_group, :discussion_comments, :discussion_attachments
scope :for_discussion_group_ids, ->(ids) {where('discussion_group_id IN (?)', ids)}
scope :for_ext_id, ->(id) {where(external_id: id).first}
....
讨论附件模型:
ALLOWABLE_IMAGES = ["image/gif", "image/jpeg", "image/jpg", "image/png"]
ALLOWABLE_APPLICATIONS = ["application/vnd.oasis.opendocument.text",
"application/vnd.oasis.opendocument.spreadsheet",
"application/vnd.oasis.opendocument.presentation",
"application/vnd.ms-excel",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"application/vnd.ms-powerpoint",
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"application/vnd.ms-word", "application/pdf", "text/plain"]
class DiscussionAttachment < ActiveRecord::Base
belongs_to :discussion
belongs_to :creator, :class_name => "Person", :foreign_key => "created_by"
belongs_to :updater, :class_name => "Person", :foreign_key => "created_by"
has_attached_file :document
validates_attachment :document, :presence => true,
:content_type => { :content_type => ALLOWABLE_APPLICATIONS + ALLOWABLE_IMAGES },
:size => { :in => 0..5.megabytes }
end
讨论 Controller :
class DiscussionsController < ApplicationController
before_action :set_discussion, only: [:show, :destroy]
before_action :authorized_for_discussion?, only: [:show]
before_action :authorized_to_start_discussion?, only: [:new, :create]
...
def new
@discussion = Discussion.new
@discussion_group = DiscussionGroup.find(params[:discussion_group_id])
@categories = DiscussionCategory.show.collect{|category| [category.name, category.id]}
3.times {@discussion.discussion_attachments.build(created_by: current_user.PersonID)}
end
def create
@discussion = Discussion.new(discussion_params.merge!({discussion_group_id: params[:discussion_group_id]}))
@discussion.created_by = current_user.PersonID
respond_to do |format|
if @discussion.save
flash[:success] = 'Discussion created successfully.'
format.html { redirect_to discussion_group_discussion_path(@discussion.discussion_group, @discussion), notice: 'Discussion was successfully created.' }
format.json { render action: 'show', status: :created, location: @discussion }
Notify.new_discussion_notification(@discussion).deliver
else
flash[:error] = 'Discussion not created.'
@discussion_group = DiscussionGroup.find(params[:discussion_group_id])
3.times {@discussion.discussion_attachments.build(created_by: current_user.PersonID)}
format.html { render action: 'new' }
format.json { render json: @discussion.errors, status: :unprocessable_entity }
end
end
end
...
private
...
def set_discussion
@discussion = Discussion.find(params[:id])
end
def discussion_params
params.require(:discussion).permit(:discussion_group_id, :discussion_category_id, :subject, :body, :document, discussion_attachments_attributes: [:id, :document])
end
end
讨论 View :
=render partial: 'shared/error_messages', locals: {object: @discussion}
%h1 Create Discussion
%h4 #{@discussion_group.name }
.form-box
=form_for @discussion, url: discussion_group_discussions_path, html: {multipart: true}, method: :post do |f|
=f.hidden_field :discussion_group_id, value: @discussion_group.id
.row
.col-md-8.form-group
=f.label :subject
%span.required *
=f.text_field :subject, class: "form-control", placeholder: 'Enter a subject for your discussion'
.col-md-4.form-group
=f.label :discussion_category, 'Discussion Category'
=f.select :discussion_category_id, DiscussionCategory.show.collect{|category| [category.name, category.id]}, {prompt: true}, {class: 'dropselection form-control'}
.row
.col-md-8.form-group
=f.label :body, "Body"
%span.required *
=f.text_area :body, class: "form-control", rows: 10
.col-md-4.form-group
%label Upload Files
= f.fields_for :discussion_attachments, :html => {class: "form-control"} do |builder|
= builder.file_field :document
%br
.form-group.row
.col-md-12
=f.submit 'Create', class: "btn btn-default"
= link_to 'Cancel', discussion_group_path(@discussion_group), class: 'btn btn-default'
.row
.col-md-12
%small
%span.required *
Denotes required fields
%br
感谢您提供的任何帮助。
最佳答案
万一有人遇到这样的问题。查看 rails 日志并弄清楚 params 哈希是什么样的。我遇到的问题是,由于构建了多个附件字段,:discussion_attachments_attributes 指向一个散列,其键值是附件数组的索引。在我的例子中,有 3 个字段。
因此,我在讨论 Controller 中创建了一个私有(private)方法:
def set_attachments_created_by
attrs = params[:discussion][:discussion_attachments_attributes]
attrs['0'][:created_by] = current_user.PersonID if attrs['0'].present?
attrs['1'][:created_by] = current_user.PersonID if attrs['1'].present?
attrs['2'][:created_by] = current_user.PersonID if attrs['2'].present?
end
然后在创建中,我在创建讨论之前调用该方法:
def create
set_attachments_created_by if params[:discussion][:discussion_attachments_attributes].present?
@discussion = Discussion.new(discussion_params)
@discussion.created_by = current_user.PersonID
....
可能有更优雅的方法来执行此操作,但它适用于此目的并允许 nested_attribute 传递到 DiscussionAttachments 模型。请记住在强参数声明中添加 :created_by。
关于ruby-on-rails - 通过 Rails 中的 nested_attributes 传递 current_user ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29522497/
出现在 python 2.7.8 中。 3.4.1 不会发生这种情况。 示例: >>> id(id) 140117478913736 >>> id(id) 140117478913736 >>> id
好吧,我对动态创建的控件的 ID 很困惑。 Public Class TestClass Inherits Panel Implements INamingContainer
我收到下面的错误,说有堆栈溢出。发生这种情况是因为带有 IN (id, id, id...id) 的 SQL 语句有大量参数。有没有什么办法解决这一问题?这是在我使用 Eclipse 的本地环境中发生
为什么 CPython(不知道其他 Python 实现)有以下行为? tuple1 = () tuple2 = ()
为什么 CPython(对其他 Python 实现一无所知)有以下行为? tuple1 = () tuple2 = ()
非常简单的问题:当我有一个持久对象时,它通常有一个名为 ID 的属性(对于抽象类)。 那么..命名约定是ID还是Id? 例如。 public int ID { get; set; } 或 public
知道为什么我会收到此错误,我已经尝试了所有命名约定(小写/大写) 我正在使用 Vaadin,这是我的代码片段: public class Usercontainer extends BeanI
为什么 CPython(不知道其他 Python 实现)有以下行为? tuple1 = () tuple2 = ()
我需要改变表的所有主键 UPDATE TODO SET id = id + 1 但我做不到(Demo 来自 Ahmad Al-Mutawa 的回答)描述了原因。主键不能这样改。 我也不能根据这是 sq
我正在尝试列出与用户相关的讨论列表。 想象一下,如果你愿意的话: posts -------------------------------------------------------------
我有一个表,其中包含一些具有自己的 ID 和共享 SKU key 的文章。我尝试使用左连接进行查询,并使用组结果获取从查询返回的所有 id。 我的数据结构是这样的: id - name -
在下表People中: id name 1 James 2 Yun 3 Ethan 如果我想找到最大 ID,我可以运行此查询 select max(id) id from People; 结果是
我正在产品页面上创建评论模块,其中显示垃圾评论选项,并显示 onclick 显示和隐藏弹出窗口。现在它在单个评论中工作正常但是当评论是两个时它同时打开两个因为类是相同的。现在这就是为什么我想要获取父
根据 REST 哲学,PUT操作应该(取自维基百科): PUT http://example.com/resources/142 Update the address member of the co
我想知道如何在使用 PHP 或 JavaScript 进行身份验证后从 Google Analytics 获取 Property Id、View Id 和 Account Id?因为我希望能够将它们存
我想使用所选按钮的 ID 进行删除。但我不知道如何从中获取/获取 id。我尝试了 this.id 但不起作用。 这是我创建按钮的地方: var deleteEmployer= document.cre
我有一个具有以下结构的表“表” ID LinkedWith 12 13 13 12 14 13 15 14 16
请不要在未阅读问题的情况下将问题标记为重复。我确实发布了一个类似的问题,但 STACKOVERFLOW 社区成员要求我单独重新发布修改后的问题,因为考虑到一个小而微妙的修改,解决方案要复杂得多。 假设
在 Android Studio 中,我创建了一个 Person.java 类。我使用Generate 创建了getter 和setter 以及构造函数。 这是我的 Person.java 类: pu
如何在 jQuery 中制作这样的东西: //这是显示的主体 ID //当我悬停 #hover-id 时,我希望 #principal-id 消失并更改 。但是当我将光标放在 #this-id 上时
我是一名优秀的程序员,十分优秀!