仅在信息尚未存在于数据库中时才显示表单字段

时间:2014-01-19 22:18:10

标签: ruby-on-rails ruby-on-rails-4

如果您还没有其他地方的信息(例如来自用户会话),是否有办法只将表单参数显示为输入字段?

这是我的表格:

<%= simple_form_for [@user, Message.new] do |f| %>
  <p>
    <%= f.input :name, label: "Name: ", input_html: {size:50} %>
    <%= f.input :email, label: "E-mail: ", input_html: {size:50} %>
    <%= f.input :message_text, label: "Message: " %>
 </p>

 <p>
    <%= f.button :submit, "Send Message" %>
 </p>
   

如果填写表单的人当前没有登录,我会有效地希望显示“名称”,如果他们是,则预先填充用户的“名字姓氏”。

电子邮件地址相同。

邮件的收件人应该收到表单元素或预先填充的元素,具体取决于相关内容。

这是在表单视图或MessagesController中发生的吗?

ADDED:我还在下面定义了message_params,它在'create'方法中调用:

def message_params
  params.require(:message).permit(:name, :email, :message_text, :subject, :is_read, :user_id)
end

这会产生影响吗?

3 个答案:

答案 0 :(得分:1)

在您的控制器中:

@user = current_user || User.new

答案 1 :(得分:0)

新动作

def new    
    if current_user
      @message = Message.new(:email => current_user.email, :name => current_user.firstname + " " + current_user.lastname)
    else
      @message = Message.new
    end
end

视图

<%= simple_form_for @message do |f| %>
  <p>
    <%= f.input :name, label: "Name: ", input_html: {size:50} %>
    <%= f.input :email, label: "E-mail: ", input_html: {size:50} %>
    <%= f.input :message_text, label: "Message: " %>
 </p>

 <p>
    <%= f.button :submit, "Send Message" %>
 </p>

答案 2 :(得分:0)

通过一些帮助来解决这个问题。添加到消息控制器:

def new
@user = User.find_by_username(params[:user_id])
@message = Message.new

if current_user.present?
  @message.name = current_user.name
  @message.email = current_user.email
end  
# display form for 'new' message

end

添加到用户模型:

def name
    "#{firstname} #{lastname}"
end 

修改了新消息的视图:

<%= simple_form_for [@user, @message] do |f| %>
<%= f.input :name, label: "Name: ", input_html: {size:50} %>
<%= f.input :email, label: "E-mail: ", input_html: {size:50} %>
<%= f.input :subject, label: "Subject: ", input_html: {size:100} %>
<%= f.input :message_text, label: "Message: " %>

 <p>
    <%= f.button :submit, "Send Message" %>
 </p>
<% end %>

感谢@Pierre正确方向的推动。