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

Ruby on rails 如何将任意(非模型属性)值传递给rails操作?,ruby-on-rails,form-for,Ruby On Rails,Form For,我有一个用户之间的单向关系模型(用户有很多关系),它保存两个给定用户的ID以及用户a对用户b的昵称。我想使用一个表单允许用户传入另一个用户的电子邮件地址和昵称。如果存在具有该电子邮件的用户,则在用户之间创建关系。如果没有匹配的用户,请使用该电子邮件创建一个新的“虚拟”用户,然后建立关系 我对rails比较陌生,首先天真地尝试使用基本的: = form_for @relationship do |f| = f.label :email = f.text_field :email

我有一个用户之间的单向关系模型(用户有很多关系),它保存两个给定用户的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"
此操作失败,因为关系模型不包含电子邮件属性。然后我尝试了下面的方法,认为它可能有效,因为它没有直接引用关系模型

= 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"
但这会抛出一个错误“参数数量错误(1对2)”


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

使用第一种形式,只需在模型中将
attr\u访问器
设置为电子邮件属性即可

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

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

  attr_accessor :email

class-Relationship