gpt4 book ai didi

ruby-on-rails - 在 ruby​​ on rails 4 中,如何在 forms_for 助手中设置一个与模型无关的属性?

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:14 24 4
gpt4 key购买 nike

我希望能够通过 Controller 中的 params[:to_whom] 访问 :to_whom 文本值。模型中不存在 To_whom。

我得到了合理的错误:“对话的未定义方法‘to_whom’”

如何添加任意属性以传回 Rails 中的 Controller ?

此外,在我看来,我制作的 Message.newConversation.new 非常丑陋。我最初在 Controller 中设置了 @conversation = Conversation.new,但是我发现无论如何我都必须在第二个 Controller 方法中重新创建这些变量,这是有道理的(在我点击提交按钮之后)。因此,我没有在 new 方法中设置 @message@conversation,而是从 new 中删除了所有行并在 View 中执行了 .new 语法。有没有一种更优雅的方式来编写这段代码,这样它就不会那么笨拙了?

Controller :

 class ConversationsController < ApplicationController
attr_accessor :conversation, :user, :to_whom

# this is the method that generates the below view
def new
end

def create
...
end
end

查看:

<%= form_for([current_user, Conversation.new]) do |c| %>
<%= c.label :to_whom %>
<%= c.text_field :to_whom %>

<%= c.label :subject %>
<%= c.text_field :subject %>
<%= form_for(Message.new) do |m| %>
<%= m.label :message %>
<%= m.text_field :text %>

<div class="actions">
<%= submit_tag "send" %>
</div>
<% end %>
<% end %>

最佳答案

虚拟属性

你的 attr_accessor属于您的模型(而不是您的 Controller )。目前,您已将其存储在您的 controller 中,它不会在模型级别执行任何操作:

#app/models/conversation.rb
Class Conversation < ActiveRecord::Base
attr_accessor :conversation, :user, :to_whom
end

#app/controllers/conversations_controller.rb
# remove attr_accessor

您必须记住,由于 Ruby 是面向对象的,因此您获得的所有 data 对象都来自 model。这意味着如果您调用 @conversation = Conversation.new,该模型的 attributes 实际上是在 conversation 模型中创建的

通常,模型会根据您的数据库列设置属性。如果您没有数据库列,则需要创建相关的 getter / setter methods使用 attr_accessor 模块

关于ruby-on-rails - 在 ruby​​ on rails 4 中,如何在 forms_for 助手中设置一个与模型无关的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24010142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com