【问题标题】:rails validate data and get data using strong parameterrails 使用强参数验证数据并获取数据
【发布时间】:2013-10-23 07:48:26
【问题描述】:

我有 3 张桌子

User(id,email)
Org(id,name)
Role(id,user_id,org_id,role)

Ajax 请求发送参数

org[name]   test
org[user][email]    test@test.com

在我的控制器中

def create 
  client_org = Org.new(client_org_params)
  respond_to do |format|
  @client_org.valid?
  if !@client_org.errors.blank?
    format.json { render json: @client_org.errors, status: :unprocessable_entity }
    elsif Org.saveClientOrg(@client_org)

  end
end
private
def client_org_params
  params.require(:client_org).permit(:name,user_attributes: [:email])
end

在组织模型中

def self.saveClientOrg(orgData)
    org=ClientOrg.new(orgData.name)//-->okay I got name: test
    orgData.user.email //error? undefined method `user' for #<Org>
end

看起来像这行代码:orgData.user.email 不正确。

当我将 2 个输入字段留空并提交表单 ==> 表单验证说只有名称为空白并忽略电子邮件。虽然在模型 user.rb 我设置验证:电子邮件,存在:真 有人帮我吗?提前致谢

编辑

User.rb
has_many :roles
has_many :orgs, through: :roles
default_scope -> { order('email ASC') }
validates_format_of :email, :with  => Devise.email_regexp
validates :email, presence: true

Org.rb
has_many :roles
has_many :users, through: :roles
validates :name, presence: true , uniqueness: { case_sensitive: false }

Role.rb
belongs_to :user
belongs_to :org

【问题讨论】:

标签: ruby-on-rails validation strong-parameters


【解决方案1】:

orgData 是您的org 模型的活动记录对象吗?

所以在 org.rb 中你需要这样做

orgData.users.email

用户应该是复数users

【讨论】:

  • 您的代码:orgData.users.email 引发错误-->#<:associations::collectionproxy> 的未定义方法 `email'
  • 试试这个:orgData.users.first.email
  • 参数 POST ajax: {"utf8"=>"✓", "org"=>{"name"=>"test", "user"=>{"email"=>"test @test.com"}}, "done"=>"Done"}--> 无法收到电子邮件
  • 如果这是您的参数结构,那么您可以将email 参数作为params["org"]["user"]["email"] 访问,这将获得email 键的值
猜你喜欢
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多