2014-01-19 35 views
0

如果您还没有其他信息(例如用户会话)中的信息,是否只有将表单参数显示为输入字段的方法?仅当数据库中尚未存在信息时才显示表单字段

这是我的形式:

<%= 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?

补充:我还定义低于这个message_params这就是所谓的“创造”的方法:

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

这会不会产生影响?

+0

因此,你仍然希望在两种情况下显示表单字段 - 当用户登录时**和**时,他不是。您只希望他们在前一种情况下显示用户的数据。你的问题可以使用一些清理。 – depa

+0

是的 - 没错。如果用户登录,我仍然希望显示表单域,只需登录时预先填入用户信息即可。谢谢!对不起 - 第一个问题。总新手。 – rubynewbie14

回答

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的微移。

1

在你的控制器:

@user = current_user || User.new 
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> 
+0

谢谢皮埃尔 - 我试过,但信息似乎并没有出现在窗体中。我已经将下面的message_params定义为def message_params \t params.require(:message).permit(:name,:email,:message_text,:subject,:is_read,:user_id) end - 这可能与它有关? – rubynewbie14

+0

我不知道什么可能是问题,你的参数似乎是正确的。你能链接到github吗? – Pierre

相关问题