如何将任意(非模型属性)值传递给rails操作?

Mis*_*aka 11 ruby-on-rails form-for

我在用户之间有一个单向关系模型(用户有很多关系),它保存两个给定用户的ID以及用户a对用户b的昵称.我想使用表单允许用户传入另一个用户的电子邮件地址和昵称.如果存在具有该电子邮件的用户,则在用户之间创建关系.如果没有用户匹配,请使用该电子邮件创建一个新的"幻影"用户,然后建立关系.

我对rails很新,并且首先尝试使用基本的:

= form_for @relationship do |f|
    = f.label :email
    = f.text_field :email
    = f.label :nickname, "Nickname"
    = f.text_field :nickname
    = f.submit "Submit", class: "btn btn-large btn-primary"
Run Code Online (Sandbox Code Playgroud)

此操作失败,因为关系模型不包含电子邮件属性.然后我尝试了以下内容,认为它可能有效,因为它没有直接引用关系模型.

= form_tag :controller => "relationships", :action => "create" do
    = label :email        
    = text_field :email
    = label :nickname, "Nickname"
    = text_field :nickname
    = submit "Submit", class: "btn btn-large btn-primary"
Run Code Online (Sandbox Code Playgroud)

但是这会引发错误"错误的参数数量(1对2)"

我可以在关系模型中添加一个电子邮件字段,但除了我用它来查找所需用户之外,我不需要它.我的计划是使用传递给关系控制器中的create动作的电子邮件和昵称值来创建关系或创建新用户,然后根据具体情况建立关系.那么如何将任意值传递给控制器​​动作呢?

Tri*_*rip 14

使用第一个表单,只需attr_accessor在模型中创建email属性即可.

这基本上是一个临时变量,你可以从类似表单的东西派生,但它不会保存到数据库中.

class Relationship < ActiveRecord::Base # <- Assuming that's the name of your Relationship model

  attr_accessor :email
Run Code Online (Sandbox Code Playgroud)

  • Rails 4中有强大的params怎么样? (3认同)
  • @Micah请参阅http://stackoverflow.com/a/15920542.只需将它们添加到允许的参数列表中即可. (3认同)